Regex oder Operator vermeiden Wiederholung

8

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%

Bearbeiten

Danke an @Mark , das ich weiß:

%Vor%

weil ich interessiert bin zu sehen, ob etwas in Gruppe A oder B caputed wurde.

    
Tono Nam 06.02.2013, 23:10
quelle

4 Antworten

7

Sie könnten negative Lookaheads verwenden:

%Vor%

Siehe online arbeiten: Rubel

    
Mark Byers 06.02.2013, 23:12
quelle
4

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.

Live-Demo .

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.

    
Qtax 06.02.2013 23:49
quelle
0

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.

    
OmegaMan 06.02.2013 23:50
quelle
0

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.

    
MikeM 06.02.2013 23:52
quelle

Tags und Links