Quelle expression régulière puis-je utiliser pour rechercher toutes les chaînes bar
ne sont pas précédées de la chaîne foo
? Avoir des espaces entre les deux est également illégal.Comment trouver un mot non précédé d'un autre mot spécifique?
Ainsi, le regex doit correspondre aux chaînes suivantes
foo is bar
hello bar
Mais pas ces
foobar
foo bar
J'ai essayé d'utiliser la
suivante(?!<foo)bar
et il obtient le travail accompli pour éliminer foobar
, mais je dois prendre soin de l'espace, et bien sûr
(?!<foo)\s*bar
correspond à toutes les chaînes.
Merci!
"correspond à toutes les chaînes." - mode pédant: (?!
Vous avez raison, merci de l'avoir signalé! J'ai fini par utiliser ce qui suit: preg_match ('/ (foo)? \ S * bar /', haystack, matches); qui trouvera la barre (précédée ou non par foo), puis une vérification rapide des correspondances [] permettra d'identifier si un truc était là ou non. – Sleepster
La chose que vous recherchez est spécifiquement appelée ** assertion de regard négatif derrière la largeur **. Perl, notamment, ne supporte pas look-behind à largeur variable (positive ou négative), donc des choses comme \ s * dans l'une d'entre elles ne fonctionneront pas. Essayez d'utiliser plusieurs opérateurs de correspondance à la place. – fennec