![]() |
Spezieller regulärer Ausdruck gesucht! Hi Leute! Ich hab mal wieder ein Problem: Ich brauche einen regulären Ausdruck, escapte (oder ge-"\"-te) Sonderzeichen in einem String erkennen soll: PHP-Code: PHP-Code: |
Versuch doch mal das hier: preg_replace( '_(?<!\\)("|\')(.*?)(\\1)_ie', 'funktion(str_replace('\\"', '"', "$2"))', $str); http://de.php.net/manual/en/referenc...ern.syntax.php -> "Assertions" (negative lookbehind assertion) Das str_replace kommt mit rein, weil PHP den String $2 scheinbar immer eins zuviel \-t. Du kannst ja mal versuchen, es wegzulassen, und dann Strings mit ' oder " oder \ verarbeiten. (Edit: Wieso ist eigentlich sogar das vB3 so blöd und zeigt meine führenden Leerzeichen nicht an?!?) |
Der RegExp, so wie du ihn gepostet hast, erzeugt einen Parse-Error, wenn man den diesen Fehler verursachenden Teil korrigiert, erhält man trotzdem noch eine Warnung! PHP-Code: Code: Warning: Compilation failed: lookbehind assertion is not fixed length at offset 20 in D:\apache\Apache2\htdocs\regexptest.php on line 6 EDIT: Habe etwas gefunden, was allerdings leider mit PHP nicht zu funktionieren scheint: http://www.regexlib.com/RETester.aspx?regexp_id=355 Bei ereg bekomme ich eine Fehlermeldung, bei preg-Funktionen funktionieren die geschützen Anführungszeichen nicht! |
Juhu, ich bin doch noch fündig geworden und zwar bei Smarty: "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" Vielleicht hilft es ja nochmal irgendwem, der das gleiche Problem hat! |
Oh, naja, nach der lookbehind Assertion sollte halt ein \ kommen. Da der einmal für PHP und einmal für preg bearbeitet verden muss, sollten es wohl 4 statt 2 sein, also \\\\ |
Zitat:
|
Die Anführungszeichen am Anfang und am Ende gehören zum RegEx! Der RegEx ist übrigens für meine Template-Engine gedacht und für meine Zwecke reicht es vollkommen aus, denn wer in sein Template absichtlich Fehler einbaut, um einen PArse-Error zu erzeugen, der hat selber Schuld! |
Die gehören dazu. Warum braucht's da dann überall 4 \ ? Naja, du wolltest doch alle \" und \' ignorieren, oder? Also z.B. in: text "string" bla bla \" ignore me Und was passiert damit: text \" bla "string" bla bla \" ignore me Hier wird ab dem ersten " (und da steht ein \ davor) erkannt. Ob der 2. Teil auch erkannt wird, kann ich nicht sagen, das Ding ist viel zu kompliziert dafür. Naja, ich geh eh davon aus, dass du den Ausdruck noch verändern wirst, da er ja nichtmal ne sammelnde Klammer drin hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr. |