Regulären Ausdruck übereinstimmen, alle Wörter, aber match-einzigartige Wörter, die nur einmal
Ist es möglich, einen regulären Ausdruck zu verwenden mit allen Worten, aber match-einzigartige Wörter, die nur einmal? Ich bin mir bewusst, es gibt andere Wege, dies zu tun, aber ich bin daran interessiert zu wissen, ob dies möglich ist, mit der ein regulärer Ausdruck verwendet wird.
Beispielsweise momentan habe ich den folgenden Ausdruck:
(\w+\b)(?!.*\1)
und die folgende Zeichenfolge:
glass shoes door window door glasses. window glasses
Für den größten Teil der Ausdruck funktioniert und entspricht den folgenden Worten:
shoes
door
window
glasses
Es gibt zwei Probleme mit diesem:
-
Eine übereinstimmung für eine unterzeichenfolge ist auf "Brille" mit "Glas"
das ist falsch. -
"Brille" und "Brille". sollte passen aber derzeit nicht.
Dem letzten Spiel sollten sein:
shoes
door
window
glasses
glass
- Die richtige Antwort ist hier. Andere Antworten sind nicht die Buchhaltung für ganze Wörter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ziemlich nahe, nur readd die
\b
im negativen lookaheadSehen es auf Rubular
\1
offenbar nicht mit der\b
aus der ersten Gruppe. Sollte nicht\1
match alles in der Gruppe und nicht nur\w+
?\b
ist, um sicherzustellen, dass die negativen lookahead passt ein ganzes Wort und nicht nur eine Teilfolge, standardmäßig, es passt Teilstrings.\b
ist Wort-Grenze nach dem Wort Zeichen definiert, die in\w
, so wird es keine Wortgrenze um_
imapple_apple
.Genau wie maček Antwort, aber mit einer extra - \ - b vor der back-Referenz, sonst hätten Sie
glass shoes door window door glasses. window glasses sunglasses
Würden Sie verpassen ein Spiel für Gläser, wie Sie findet Sie in der word-Sonnenbrille.
/(\w+\b)(?!.*\b\1\b)/
\b
vor\w
es nicht versäumen, fürsunglasses glasses
Für die Suche verschiedene Wörter in mehrzeiligen text verwenden
[\s\S]
statt.