2017-05-28 5 views
1

ich Sätze haben, als solche:Spiel eine Phrase, wenn sie alle Wörter aus einer Liste enthält - regex

computer keyboard 
computer keyboard black 
computer keyboard black mouse 

ich dann eine Reihe von Wörtern haben, aber ich möchte nur die Sätze zurück, wenn jedes Wort Streichhölzer ein Eintrag im Array. Hier

ist ein Beispiel-Array:

["keyboard","computer","black"] 

Ich mag würde passen ‚Computer-Tastatur‘ und ‚Computer-Tastatur schwarz‘, aber nicht ‚Computer-Tastatur schwarz Maus‘, da Maus existiert nicht in die Liste der Wörter.

Hier ist, was ich bisher:

(?=.*?(keyboard|computer|black)).* 

Das einzige Problem ist, natürlich, das nach wie vor für den 3. Satz übereinstimmt. Ist dies mit regulären Ausdrücken möglich?

Antwort

1

Try ^(?:(?:keyboard|computer|black)(?: |$))+$ in mehrzeiligen m-Modus zu verwenden ...

Das bedeutet:

^ ... $ - Spiel von Beginn der Zeile muss der Linie enden

(?: ...)+ - Gruppe eine oder mehrere sich wiederholende mal

(?:keyboard|computer|black)(?: |$) - eines der drei Wörter endet mit einem Leerzeichen oder Ende der Zeile

Alle Gruppen werden nicht auffang ?:, weil Sie nur einen vollen Sätze

benötigen

Demo: https://regex101.com/r/d0dD0w/3

+0

Dank Sergey - funktioniert, aber jetzt ist postgresql ‚regulärer Ausdruck ist zu komplex‘ beschweren – dmcmulle

Verwandte Themen