Debe usar anticipación como han dicho algunos de los otros respondedores, pero la anticipación debe tener en cuenta otros caracteres entre su palabra objetivo y la posición de coincidencia actual. Por ejemplo:
(?=.*word1)(?=.*word2)(?=.*word3)
El .*
primer vistazo anticipado le permite coincidir con la cantidad de caracteres que necesita antes de llegar a "palabra1". Luego se restablece la posición de coincidencia y la segunda búsqueda anticipada busca "word2". Restablezca de nuevo, y la parte final coincide con "word3"; Dado que es la última palabra que está buscando, no es necesario que esté en un futuro, pero no duele.
Para hacer coincidir un párrafo completo, debe anclar la expresión regular en ambos extremos y agregar una final .*
para consumir los caracteres restantes. Usando la notación de estilo Perl, eso sería:
/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m
El modificador 'm' es para el modo multilínea; permite ^
y $
coincide en los límites de los párrafos ("límites de línea" en expresiones regulares). Es esencial en este caso que no utilice el modificador 's', que permite que el metacarácter de punto coincida con las nuevas líneas y con todos los demás caracteres.
Finalmente, desea asegurarse de que está haciendo coincidir palabras enteras y no solo fragmentos de palabras más largas, por lo que debe agregar límites de palabras:
/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m