Rolf B: Reguläre Ausdrücke

Beitrag lesen

Hallo Gunnar,

je nach Regex-Engine kann man die Unicode-Kategorie verwenden. \p{L} matcht auch Umlaute, bzw die Negierung \P{L} matcht keine.

/\P{L}und\P{L}/ funktioniert - als erster Ansatz - in PHP, Java oder C# sofort. In JavaScript muss man der Regex die u Option hinzufügen.

Nachteilig ist daran, dass nicht nur das "und" gematcht wird, sondern auch das Nichtwortzeichen davor und dahinter. Man muss also das "und" in Klammern setzen und auf die Capture-Gruppe zugreifen, oder man verwendet Assertions (negative lookbehind und negative lookahead):

/(?<!\p{L})und(?!\p{L})/

Auch dafür ist in JavaScript das u Flag nötig.

Diese Regex besteht aus drei Teilen:

(?<!\p{L}) - dies ist ein "zero-width negative lookbehind". Ein "lookbehind" bedeutet: Schau Dir an, was vor dem Treffer kommt. (?<!...)und meint damit: Wenn Du ein "und" findest, guck Dir die Zeichen vor dem "und" an. "negative lookbehind" meint: Das, was da in den Klammern steht, darf nicht gefunden werden. Und "zero width" sagt: Guck's Dir nur an. Aber betrachte es nicht als Teil des Treffers. Also zusammengefasst: Prüfe, ob vor dem "und" kein Unicode-Buchstabenzeichen steht.

und - genau das

(?!\p{L})` - Das ist das Vorwärtsgegenstück zu ?<!, es prüft das Zeichen hinter dem "und".

Probiert mit regex101.com und regexstorm.net, es findet ein "und", dem weder ein Unicode-Letter vorangestellt ist noch einer nachfolgt.

Findet also auch das "und" in "und123".

Rolf

--
sumpsi - posui - obstruxi