#1
| ||||
| ||||
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: __________________ Fabian Michael "Ein Tag, an dem du nicht lächelst, ist ein verlorener Tag." - Charlie Chaplin Wiki |
#2
| ||||
| ||||
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?!?) __________________ Yves Goergen Softwareentwicklung, Fotografie, Webhosting, UNB Components (in Arbeit) |
#3
| ||||
| ||||
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! __________________ Fabian Michael "Ein Tag, an dem du nicht lächelst, ist ein verlorener Tag." - Charlie Chaplin Wiki |
#4
| ||||
| ||||
Juhu, ich bin doch noch fündig geworden und zwar bei Smarty: "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" Vielleicht hilft es ja nochmal irgendwem, der das gleiche Problem hat! __________________ Fabian Michael "Ein Tag, an dem du nicht lächelst, ist ein verlorener Tag." - Charlie Chaplin Wiki |
#5
| ||||
| ||||
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 \\\\ __________________ Yves Goergen Softwareentwicklung, Fotografie, Webhosting, UNB Components (in Arbeit) |
#6
| ||||
| ||||
Zitat:
__________________ Yves Goergen Softwareentwicklung, Fotografie, Webhosting, UNB Components (in Arbeit) |
#7
| ||||
| ||||
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! __________________ Fabian Michael "Ein Tag, an dem du nicht lächelst, ist ein verlorener Tag." - Charlie Chaplin Wiki |
#8
| ||||
| ||||
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. __________________ Yves Goergen Softwareentwicklung, Fotografie, Webhosting, UNB Components (in Arbeit) |
Stichworte |
- |