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):

<p style="background-color: #eeeeee;">Das ist kurzer Text Das ist ein langer Text Das ist ein toller Text Das ist ein langweiliger Text</p>

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!

<h1>+++ Lösung / Solution +++</h1>

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