VB.Net - RegEx - String enthält NICHT ein bestimmtes Wort
Hi,
RegEx ist nicht meine Stärke.
Ich will in einem meiner Programme benutzerdefinierte Textfilter einbauen. Die Benutzer sollen u.a. auch per RegEx Listen filtern können.
Nun teste ich selbst gerade damit und bin auf eine Anforderung gestoßen, welche ich mit meinen bescheidenen RegEx-Kenntnissen nicht auf die Reihe bekomme.
Ich will z.B., dass Strings überprüft werden, ob sie folgendem Schema entsprechen: Enthält "Hallo" und "Welt" aber nicht "falsch".
Mein Versuch:
Wenn ich den String "Hallo schöne Welt! Das ist ein falsches Wort." damit teste, bekomme ich ein Match.
Wenn ich "Hallo schöne Welt! Das ist ein Wort." damit teste, bekomme ich auch ein Match.
Wie muss ich sowas anstellen?
E.
RegEx ist nicht meine Stärke.
Ich will in einem meiner Programme benutzerdefinierte Textfilter einbauen. Die Benutzer sollen u.a. auch per RegEx Listen filtern können.
Nun teste ich selbst gerade damit und bin auf eine Anforderung gestoßen, welche ich mit meinen bescheidenen RegEx-Kenntnissen nicht auf die Reihe bekomme.
Ich will z.B., dass Strings überprüft werden, ob sie folgendem Schema entsprechen: Enthält "Hallo" und "Welt" aber nicht "falsch".
Mein Versuch:
Hallo.*Welt.*(?!falsch).*
Wenn ich den String "Hallo schöne Welt! Das ist ein falsches Wort." damit teste, bekomme ich ein Match.
Wenn ich "Hallo schöne Welt! Das ist ein Wort." damit teste, bekomme ich auch ein Match.
Wie muss ich sowas anstellen?
E.
Dim Rx As Regex = New Regex("Hallo.*Welt.*(?!falsch).*")
Dim M As Match = Rx.Match("Hallo schöne Welt! Das ist ein falsches Wort.")
MsgBox(M.Success)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 498606
Url: https://administrator.de/forum/vb-net-regex-string-enthaelt-nicht-ein-bestimmtes-wort-498606.html
Ausgedruckt am: 12.04.2025 um 16:04 Uhr
4 Kommentare
Neuester Kommentar

Also zuerst ein Match der Worte die enthalten sein sollten mit einem Regex und danach ein weiterer Match der alle Sachen matcht die nicht enthalten sein dürfen mit
^((?!falsch).)*$
Am Ende vergleichst du beide Teile auf einen Match und gibst nur dann positive Rückmeldung wenn beide Teile positiv ausgefallen sind. Das lässt sich ja bei Bedarf auch über Arrays auf mehr Strings ausweiten.

Muss mich korrigieren (brett vor kopf klatsch). Habe gerade nochmal geprüft, wäre doch folgendermaßen machbar indem man den Negative Lookahead als erstes nutzt, denn dann geht der Regex-Parser bei einem negativen Ergebnis des Lookahaead erst gar nicht weiter im Kontext:

Hier sieht man es schön wie der Parser das ganze aufrollt (für das Beispiel der ersten Zeile):
(?!.*falsch).*Hallo.*Welt.*

Hier sieht man es schön wie der Parser das ganze aufrollt (für das Beispiel der ersten Zeile):