RegEx pour trouver les lignes qui ne contient pas un mot spécifique

Je sais qu’il est possible de trouver un mot et d’inverser ensuite les correspondances à l’aide d’une autre fonction. Cependant, est-il possible de faire correspondre des lignes qui ne contiennent pas un mot spécifique, par exemple lorem, à l’aide d’une expression régulière ?

Les données d’entrée :

hoooh
hihih
loool
lorem

Résultat souhaité :

hoooh
hihih
loool

L’idée que les expressions régulières ne prennent pas en charge les correspondances inverses n’est pas tout à fait vraie. Vous pouvez imiter ce comportement en utilisant des solutions de contournement négatives : ^((?!lorem).)*$ voir le demo.

Réponse :

^((?!lorem).)*$

Explication :

  • ^ le début de la chaîne,

  • ( groupe et capture à \1 (0 ou plus de fois (correspondant à la plus grande quantité possible)),

  • (?! regarder en avant pour voir s’il n’y a pas,

  • lorem votre chaîne de caractères,

  • ) fin de la recherche,

  • . tout caractère sauf \N,

  • )* fin de \1 (Note : parce que vous utilisez un quantificateur dans cette capture, seule la DERNIÈRE répétition du motif capturé sera stockée dans \1)

  • $ avant un \n facultatif, et la fin de la chaîne de caractères