Ich brauche eine Regex, die passt, blahfooblah
aber nichtblahfoobarblah
Ich möchte, dass es nur zu foo und allem um foo passt, solange es nicht von einem Balken gefolgt wird.
Ich habe versucht, dies zu verwenden: Das foo.*(?<!bar)
ist ziemlich nah, aber es passt blahfoobarblah
. Der negative Blick dahinter muss zu allem passen und nicht nur zur Bar.
Die spezifische Sprache, die ich verwende, ist Clojure, die Java-Regexes unter der Haube verwendet.
EDIT: Genauer gesagt, ich brauche es auch zu bestehen, blahfooblahfoobarblah
aber nicht blahfoobarblahblah
.
Antworten:
Versuchen:
Tests:
Erklärung des regulären Ausdrucks
Andere Regex
Wenn Sie nur ausschließen möchten,
bar
wenn es direkt danach istfoo
, können Sie verwendenBearbeiten
Sie haben Ihre Frage aktualisiert, um sie spezifisch zu gestalten.
Neue Tests
Neue Erklärung
(?=.*foo(?!bar))
stellt sicher, dass afoo
gefunden wird, aber nicht direkt verfolgt wirdbar
quelle
foo
aber nichtfoobar
. Zu passen,bot
aber nichtbotters
, würden Sie verwenden/(?=.*bot(?!ters))^(\w+)$/
.Versuchen Sie es, um einer
foo
Gefolgschaft etwas zuzuordnen, das nicht beginntbar
Ihre Version mit negativem Lookbehind ist effektiv "Match a
foo
gefolgt von etwas, das nicht endetbar
". Das.*
passt alle zusammenbarblah
, und das(?<!bar)
schaut zurücklah
und prüft, ob es nicht übereinstimmtbar
, was nicht, also stimmt das gesamte Muster überein.quelle
Verwenden Sie stattdessen einen negativen Blick nach vorne:
Das hat bei mir funktioniert, hoffe es hilft. Viel Glück!
quelle
Sie haben einen Kommentar geschrieben, der vorschlägt, dass dies so funktioniert, dass alle Wörter in einer Zeichenfolge und nicht die gesamte Zeichenfolge selbst übereinstimmen.
Anstatt all dies in einem Kommentar zusammenzufassen, poste ich es als neue Antwort.
Neuer Regex
Beispieltext
Streichhölzer
quelle
Ihre spezifische Match-Anfrage kann abgeglichen werden durch:
Dies wird
blahfooblahfoobarblah
aber nicht übereinstimmenblahfoobarblahblah
.Das Problem mit dem regulären Ausdruck von
foo.*(?<!bar)
der.*
nachfoo
. Es werden so viele Zeichen wie möglich nachher abgeglichenbar
.quelle