Vous avez besoin d'utiliser d'anticipation que d'autres intervenants l'ont dit, mais l'anticipation a de compte pour les autres caractères entre son mot cible et le match en cours position. Par exemple:
(?=.*word1)(?=.*word2)(?=.*word3)
L' .*
dans la première anticipation permet de match toutefois le nombre de caractères, il doit avant qu'il arrive à "mot1". Puis le match position est remise à zéro et la seconde d'anticipation à la recherche de "mot2". Reset encore une fois, et la dernière partie correspond à "terme3"; parce qu'il est le dernier mot que vous êtes en vérifiant, il n'est pas nécessaire qu'il soit dans une anticipation, mais il ne fait pas de mal.
Afin de faire correspondre un paragraphe entier, vous avez besoin pour ancrer la regex aux deux extrémités et ajouter une dernière .*
à consommer les caractères restants. À l'aide de Perl-style de notation, ce serait:
/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m
Le 'm' de modificateur pour multline mode; il permet à l' ^
et $
match au paragraphe limites ("ligne de limites" dans la regex parler). Il est essentiel, dans ce cas, vous ne pas utiliser le " s " modificateur, ce qui permet à la dot métacaractère match des retours à la ligne ainsi que tous les autres personnages.
Enfin, vous voulez vous assurer que vous êtes correspondant à des mots entiers et pas seulement des fragments de mots plus longs, vous devez ajouter des limites de mots:
/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m