korrektes escapen in preg_match und preg_replace
Andreas-Lindig
- php
Hallo Forum,
wie muß ich in den Funktionen preg_match, preg_match_all und preg_replace nach "" suchen?
diese Versionen ergeben immer Fehlermeldungen:
$this->eingabe ist ein eingegebener Wert - bei diesem Test eben "", das ist mit echo überprüft.
| if(preg_match("/\/", $this->eingabe))
| echo '\ gefunden';
|
| Meldung:
| Warning: No ending delimiter '/' found
| if(preg_match("/(.*)\(.*)/", $this->eingabe))
| echo '\ gefunden';
|
| Meldung:
| Warning: Compilation failed: unmatched parentheses at offset 8
diese Version hingegen funktioniert:
| if(preg_match("/\\/", $this->eingabe))
| echo '\ gefunden';
kommt mir allerdings etwas seltsam vor. Meiner Meinung nach suche ich hier nach "\"
Eine Übrprüfung mit preg_match_all() ergibt aber in der Tat soviele Treffer von "" wie ich eingegeben habe. Nun will ich es aber grundsätzlich wissen, denn ich muß ja auch in Zukunft mal andere Zeichenfolgen korrekt escapen. Wie also wird "\\" aus "" ?
Gruß, Andreas
hi Andreas!
Wie also wird "\\" aus "" ?
ich rate jetzt mal:
aus "\\" wird (weil doppelte anfuehrungszeichen) die zeichenfolge '\', welche wiederum als regexp interpretiert ein einfaches backslash ergibt.
if(preg_match('/(.*)\(.*)/', $this->eingabe)) ...
mit einfachen anfuehrungszeichen sollte es tuten.
prost
seth
Hallo seth,
if(preg_match('/(.*)\(.*)/', $this->eingabe)) ...
mit einfachen anfuehrungszeichen sollte es tuten.
nein, es bringt mit einfachen wie doppelten Anführungszeichen gleiche Ergebnis.
Gruß, Andreas
hi Andreas!
if(preg_match('/(.*)\(.*)/', $this->eingabe)) ...
mit einfachen anfuehrungszeichen sollte es tuten.nein, es bringt mit einfachen wie doppelten Anführungszeichen gleiche Ergebnis.
ja, stimmt. (raten war wohl nicht der richtige weg... sorry)
hab mich nun versucht, darueber zu informieren, habe aber nur folgendes ausfindig machen koennen:
Christian Kruse schrieb dazu etwas in
http://forum.de.selfhtml.org/archiv/2002/11/28617/#m154999
in einem anderen forum habe ich ein paar beispiele zum herumprobieren gefunden:
http://www.webmasterworld.com/forum88/1614.htm (beitrag von coopster)
das backslash sollte also mit \\ maskiert werden.
prost
seth