Sven Rautenberg: Unknown modifier '|'

Beitrag lesen

Moin!

Probiere doch mal (alles hier nicht notwendige, einschließlich der doppelten Anführungzeichen habe ich weggelassen):

/(&lang=en)|(?lang=en)/

Kürzer sollte sich deine Aufgabe übrigens so erledigen lassen:

/(&|?)lang=en/

Deine regulären Ausdrücke sind korrekt.

Die spannende Aufgabe ist jetzt allerdings, diese korrekt durch den PHP-Stringparser durchzukriegen. Denn wenn da Anführungszeichen drumherum kommen, dann müssen ja diverse Zeichen escaped werden, um unverändert im String zu landen.

Der Klassiker: Die Escape-Kombination für den Backslash ist \. Wenn man das vergißt, kriegt der Stringparser nicht "\?" zu sehen und macht daraus "?", sondern er sieht "?" (ein sinnlos escapetes Fragezeichen), und macht daraus "?" - und das ist nicht, was man im Regex haben will, auch wenn es eventuell glücklicherweise hier als literales Fragezeichen interpretiert wird, weil es an der Position direkt hinter der öffnenden runden Klammer seine Sonderbedeutung nicht haben kann.

- Sven Rautenberg

--
"Love your nation - respect the others."