Wie kann ich den Operator oder verwenden, der keine Wiederholung aktiviert? Mit anderen Worten die Regex:
%Vor% stimmt mit word1word2
überein und stimmt auch mit word1word1
überein, was ich nicht möchte, weil das Wort word1 wiederholt wird. Wie kann ich Wiederholungen vermeiden?
Zusammenfassend möchte ich die folgenden Themen mögen:
%Vor%Beachten Sie, dass alle übereinstimmen, weil es keine Wiederholung gibt. Und ich möchte, dass die folgenden Themen versagen:
%Vor%Danke an @Mark , das ich weiß:
%Vor%weil ich interessiert bin zu sehen, ob etwas in Gruppe A oder B caputed wurde.
Sie könnten negative Lookaheads verwenden:
%Vor%Siehe online arbeiten: Rubel
Die Lookahead-Lösungen werden in einigen Fällen nicht funktionieren. Sie können dies ohne Umwege richtig lösen, indem Sie ein Konstrukt wie dieses verwenden:
%Vor%Dies funktioniert auch, wenn einige Wörter Teilzeichenfolgen anderer sind und auch funktionieren, wenn Sie nur die übereinstimmenden Teilzeichenfolgen einer größeren Zeichenfolge (und nicht nur die ganze Zeichenfolge) suchen möchten.
Es funktioniert einfach, indem die Änderung fehlschlägt, wenn sie zuvor von (?(1)(?!))
erledigt wurde. (?(1)foo)
ist eine Bedingung und entspricht foo
, wenn die Gruppe 1
zuvor übereinstimmte. (?!)
schlägt immer fehl.
Die Lösung von Byers ist zu hart codiert und wird nach der Zunahme der Buchstaben ziemlich umständlich. Warum sollte die Regex nicht einfach nach einer doppelten Übereinstimmung suchen?
%Vor%Wenn das übereinstimmt, bedeutet diese Übereinstimmung, dass eine Wiederholung im Muster gefunden wurde. Wenn die Übereinstimmung nicht funktioniert, haben Sie einen gültigen Datensatz.
Sie könnten ein negatives Look-Ahead verwenden, das eine Rückreferenz enthält:
%Vor% wobei sich auf die Übereinstimmung der Erfassungsgruppe
(word1|word2|word3)
bezieht.
Beachten Sie, dass angenommen wird, dass word2
nicht durch Anhängen von Zeichen an word1
gebildet werden kann und dass word3
nicht durch Anhängen von Zeichen an word1
oder word2
erstellt werden kann.