php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[REGEX] Fragezeichen (?) stört preg_replace


 
Patrick_PQ
28-07-2004, 14:43 
 
Hallo,

ich möchte mit
$block=preg_replace("/{id}/",$a,$block);
folgende Zeile ersetzen:
<td><a href="#?id={id}">nur ein Klick zum Link ...</a></td>
Das klappt allerdings nur ohne das Fragezeichen im href :confused:

Wie müsste ich den pattern für preg_replace ändern, damit die Ersetzung vorgenommen wird? Habe natürlich schon die Suchen bemüht, aber nach '?' kann ich ja nicht suchen (< 3Zeichen ...).

Bin für jeden Hinweis dankbar ...

 
Abraxax
28-07-2004, 14:44 
 
\?

 
wahsaga
28-07-2004, 14:49 
 
RTFM (http://www.php.net/manual/de/pcre.pattern.syntax.php#regexp.reference.backslash)

 
Patrick_PQ
28-07-2004, 14:51 
 
@Abraxax: Danke! Aber wohin damit ... ich habe schon gelesen, dass div. Zeichen maskiert werden können bzw. müssen. Allerdings komme ich damit auch nicht weiter. Denn$block=preg_replace("/{id}\?/",$a,$block); bzw. <td><a href="#\?id={id}">nur ein Klick zum Link ...</a></td>
bringt mich nicht weiter - bin nicht lachen oder fluchen - es handelt sich um meine zweite Begegnung mit RegEx ...

 
Patrick_PQ
28-07-2004, 15:00 
 
@wahsaga: Danke, dein Beitrag hat sich mit meiner Antwort auf Abraxax's Tipp überschnitten. Das habe ich gelesen - aber ich will das ? ja nicht finden oder ersetzen, sondern nur {id}. Ich würde ein ? maskieren wenn ich {id?}ersetzen möchte (also {id\?}) - oder bin ich hier völlig falsch ?!

 
wahsaga
28-07-2004, 15:04 
 
das fragezeichen dürfte m.E. gar nicht das problem sein, sondern die geschweiften klammern.

diese haben in RegEx auch eine sonderbedeutung, nämlich den zahlenmässigen quantifier, {1,2} = suche mir stellen, an denen das voranstehende muster genau 1 oder 2 mal auftritt.

da du das hier aber nicht haben willst, müssten also vor allem erst mal die geschweiften klammern maskiert werden:

/\{id\}/

 
Patrick_PQ
28-07-2004, 15:12 
 
@wahsaga: Danke, habe ich probiert - gleiches Ergebnis: es wird keine Ersatzung vorgenommen. Lasse ich aber alles genauso wie es ist und entferne nur das ? wird die Ersetzung - trotz nicht maskierter geschweifter Klammer - durchgeführt. Jetzt bin ich doch etwas ratlos ... :dontknow:

Hat vielleicht noch jemand einen Tipp für mich?

 
Patrick_PQ
29-07-2004, 10:02 
 
Guten Morgen allerseits,

neuer Tag - neues Glück ... ?! Kann das vielleicht noch mal jemand auf seiner Maschine testen ?! Vielleicht liegt es ja auch an meiner Konfiguration? Ich verwende PHP5.0.0 auf Suse8.2.

Vielen Dank an jeden der die Ergebnisse seiner Mühen postet!

 
wahsaga
29-07-2004, 10:21 
 
ich habe einfach nur die geschweiften klammern im suchmuster maskiert, und dann funktioniert folgendes bei mir ohne probleme:

http://wazgnuks.net/misc/Patrick_PQ.php

 
MaxP0W3R
29-07-2004, 10:33 
 
du hast directory listing im ordner misc an, wahsaga

weiss nicht ob es absicht ist :)

 
wahsaga
29-07-2004, 11:17 
 
Original geschrieben von MaxP0W3R
du hast directory listing im ordner misc an, wahsaga

weiss nicht ob es absicht ist :)
nee, aber eigentlich ist's wurscht, weil ich /misc/ eh nur für beispiele etc. nutze, und darauf achte, da nichts "gefährliches" reinzulegen.

ausserdem bin ich ja selber so einer, der bei irgendwelchen links immer gerne mal stöbert, was er im verzeichnis noch so findet :-)


aber hab's jetzt mal abgestellt.

 
Patrick_PQ
29-07-2004, 11:33 
 
Danke wahsaga! Kannst du mir noch sagen welche PHP-Version du benutzt hast - bei mir geht es nämlich trozdem nicht - die geschweiften Klammern hatte ich ja gestern bereits maskiert ...

Danke!

 
wahsaga
29-07-2004, 11:35 
 
4.3.6

 
Patrick_PQ
29-07-2004, 13:32 
 
Danke! Werde mir dann mal einen weiteren Apache mit PHP4.3.6 zulegen. Der Umstieg nach PHP5 hat es doch in sich ...

-archiv-

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:55 Uhr.