Sie müssen Lookahead verwenden, wie einige der anderen Antwortenden gesagt haben, aber der Lookahead muss andere Zeichen zwischen seinem Zielwort und der aktuellen Übereinstimmungsposition berücksichtigen. Zum Beispiel:
(?=.*word1)(?=.*word2)(?=.*word3)
Mit .*
dem ersten Lookahead können Sie die Anzahl der Zeichen abgleichen, die erforderlich sind, bevor "word1" angezeigt wird. Dann wird die Übereinstimmungsposition zurückgesetzt und der zweite Lookahead sucht nach "word2". Erneut zurücksetzen und der letzte Teil stimmt mit "word3" überein; Da es das letzte Wort ist, nach dem Sie suchen, ist es nicht notwendig, dass es sich um einen Lookahead handelt, aber es tut nicht weh.
Um einem ganzen Absatz zu entsprechen, müssen Sie den regulären Ausdruck an beiden Enden verankern und ein Finale hinzufügen .*
, um die verbleibenden Zeichen zu verbrauchen. Bei Verwendung der Perl-Notation wäre dies:
/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m
Der Modifikator 'm' ist für den Mehrzeilenmodus vorgesehen. es lässt das ^
und $
an Absatzgrenzen übereinstimmen ("Zeilengrenzen" in Regex-Sprache). In diesem Fall ist es wichtig, dass Sie nicht den Modifikator 's' verwenden, mit dem das Punkt-Metazeichen sowohl mit Zeilenumbrüchen als auch mit allen anderen Zeichen übereinstimmt.
Schließlich möchten Sie sicherstellen, dass Sie ganze Wörter und nicht nur Fragmente längerer Wörter abgleichen. Daher müssen Sie Wortgrenzen hinzufügen:
/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m