dedlfix: Backslashs in REGEXP

Beitrag lesen

Hi!

ich habe aus einer JavaScript-Datei folgende RegExp geholt:
Diesen Ausdruck will ich jetzt in PHP mit preg_match() einsetzen.

In Javascript wird der Ausdruck als solcher in /.../ eingefasst. In PHP wird er zusätzlich noch als String notiert. Du musst also die String-Maskier-Regeln beachten.

Allerdings wird überhaupt keine Eingabe mehr akzeptiert. Könnte es daran liege, dass noch irgendwelches Zeichen mit einem zusätzlichen Backslash versehen werden müssen?

Kommt unter anderem auf die Art des Strings an, single oder double quoted. Wenn PHP das Zeichen interpretieren kann, wird es direkt und nicht als Escape-Sequenz an den Regexp übergeben. Interpretationsunterschiede scheint es mir zumindest bei \v zu geben, ich hab aber nicht alles untersucht. Wenn etwas keine gültige PHP-Escape-Sequenz ergibt, wird die Zeichenfolge durchgereicht und dann von der Regex-Maschine interpretiert.

Kann mir jemand sagen, um welche es sich dabei handelt und ob es evtl. auch ein Tool gibt, mit dem man solche Anpassungen schnell machen kann.

Nun, zumindest die Backslashes kannst du mit str_replace() verdoppeln, aber das wird dir am Ende nichts bringen, denn das Problem sind die \u-Sequenzen, denn die kennt weder PHP noch die dort eingebaute Regex-Maschine. Wenn du die in UTF-8-Sequenzen umgesetzt bekommst und den UTF-8-Modifier angibst, kann die Regexp-Maschine sie richtig auswerten.

Aber wie suit schon sagte, ist das alles unnötig. Zum einen weil es bereits einen Mechanismus in PHP gibt und zum anderen gibt es unzählige invalide Email-Adressen, die jedoch syntaktisch korrekt sind.

Lo!