2016-04-17 8 views
0
Hello Foo Bar World Foo World Bar Test Foo 
foo bar 

ich meine Regex aber nicht doppelte Wörter wollen alles passen:mit allen Wörtern erwarten nicht Duplikate

Es sollten alle folgenden Wörter in der Test-String übereinstimmen: Foo Bar World
Es sollte nicht überein: Hello Test weil diese nicht doppelt sind.

Wie kann ich das erreichen?

+0

Dies ist keine gute Aufgabe für Regex. Möglicherweise haben Sie [das XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Sie erhalten bessere Antworten, wenn Sie erklären, was Sie tun möchten * und was Sie versucht haben *, ohne sich auf Regex zu konzentrieren. –

+0

Sie können "ein theoretisches Muster" schreiben, um diese Wörter zu finden, aber das Problem ist, dass die Komplexität des Algorithmus, der mit dieser Art von Mustern verwendet wird, exponentiell mit der Textgröße wächst (die Anzahl der Wörter, um genau zu sein). So können Sie diese Art von Problem mit diesen Mustern nicht lösen. Ein einfacherer Weg besteht darin, Ihren Text in getrennte Wörter aufzuteilen (oder jedes Wort zu vergleichen) und die Anzahl der Vorkommen zu einem zweiten Mal zu zählen (am besten ist es möglich, einen Iterator zu verwenden und einen Hash mit dem Wort als zu inkrementieren) Schlüssel). –

+0

Ich sehe, ich war nur neugierig, ob dies mit Regex gelöst werden könnte oder nicht. Ich habe bereits andere Möglichkeiten, es zu lösen, danke: D – chris

Antwort

0

Mit positiven Voraussagen können Sie. Es ist nicht besonders effizient und ich würde Regex für die Aufgabe nicht verwenden.

/(\b\w++\b)(?=(?>.*?\1(?:.(?!\1))*)$)/gs 

Edit: Missed Casimir et Hippolyte ‚s Kommentar Antwort, die schneller ist, aber weniger kompatibel.