[Lösung] RegEx – Wort darf nicht vorkommen

Hi,

ich hab im Internet ewig gesucht nach RegEx-Pattern mit denen es mir -in einem Einzeiler- möglich ist, Strings zu finden, unter der Voraussetzung dass Wörter nicht gefunden werden. Nach einigem Rumprobieren hab ich ne Lösung gefunden.
Als Beispiel habe ich folgenden Text (Source):

Das ist kurzer Text
Das ist ein langer Text
Das ist ein toller Text
Das ist ein langweiliger Text

Jetzt möchte ich beisp. dass gesucht wird ab dem Wort „Das“ bishin zu „Text“, aber nur, wenn dazwischen nirgends „toll“ vorkommt.

Von der ersten Zeile mal abgesehen könnte man es noch mit Lookaround-Assertions (mehr dazu) lösen, weil der Text vor dem Eigenschaftswort (also „langer“, „toller“ und „langweiliger“) immer gleich ist, aber wenn das nicht mehr so ist haben wir ein Problem – wie in der ersten Zeile (weil ja dort das Wort „ein“ nicht vorkommt).

An dem Punkt hab ich auch im Internet nichts gescheites mehr gefunden – zumindest nichts was sich in einem einzigen Pattern hätte lösen lassen. Also hab ich umgedacht und mir ist tatsächlich was tolles eingefallen!

+++ Lösung / Solution +++

Anhand des oberen Beispiels – so klappts:
das (?!.*?(toll)).*?text

Es können auch mehrere Wörter angegeben, die nicht vorkommen dürfen. Beispiel:
das (?!.*?(toll|kurz)).*?text
Das findet somit nur noch die 2. und 4. Zeile.

Bei mir hab ich’s mit den Modifiern „g“ (global, also nicht nur das erste Vorkommen) und „i“ (Groß-/Kleinschreibung ignorieren) gemacht.

Beste Grüße
Marius

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich stimme zu.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.