Liste der Wörter ohne die Liste der Zeichen in der Nähe

9

Ich habe diese Regex

%Vor%

passt gut, es sei denn die zwei Wörter sind nebeneinander.

%Vor%

Im obigen Beispiel entspricht es one in Zeile 2, aber nicht or direkt daneben. Gleiches für common und word int in der dritten Zeile.

Live-Beispiel: Ссылка

Ich glaube, es hat etwas mit der Nummer der nicht übereinstimmenden Gruppen zu tun. Aber ich bin mir nicht sicher, wie ich das Endziel erreichen soll, die ganze Liste von Wörtern ohne irgendwelche Zeichen um sie herum zu finden.

Ich möchte nicht, dass das one in one's oder das Wort in word'word übereinstimmt.

    
San 30.01.2014, 04:57
quelle

2 Antworten

21

Da Ihre Capture-Gruppen auf beiden Seiten des gemeinsamen Wortes explizit ein Zeichen definieren, sucht sie nach space word space und schlägt dann fehl, wenn kein weiteres space gefunden wird.

Da Sie in diesem Fall nicht alle Zeichen abgleichen wollen, die die Wortgrenzen enthalten (Punkt, Apostroph usw.), müssen Sie mit Lookaheads, Lookbehinds und Nicht-Capture-Gruppen ein wenig tricksen. Versuchen Sie Folgendes:

%Vor%

Ссылка

Word-Grenzen sind noch einfacher zu implementieren, also als Referenz, Sie könnten dies auch tun (obwohl es ' , . , etc.) enthalten würde.

%Vor%     
brandonscript 30.01.2014, 05:01
quelle
1

Sie können stattdessen (?:[\s]|^)(one|common|word|or|another)(?=[\s]|$) verwenden.

Es passt nicht zu one's , someone , etc ...

Überprüfen Sie DEMO

    
Sujith PS 30.01.2014 05:02
quelle