2009-06-19 5 views
1

Je veux utiliser une regex pour trouver une chaîne particulière dans mon exemple, mais je veux que la regex échoue si je trouve une autre chaîne pour la première fois. Permettez-moi de donner un exemple:Comment faire pour qu'une regex ne corresponde PAS quand je trouve quelque chose d'indésirable

Faites correspondre find_me seulement si nous ne rencontrons pas d'abord stop_here. (. Je ne me soucie pas si stop_here se produit plus tard dans l'échantillon)

Donc, cela devrait correspondre:

blah blah find_me blah stop_here

Mais cela ne devrait pas:

blah blah stop_here blah find_me

(J'utilise le moteur .ge regex)

Répondre

8
^(?:(?!stop_here).)*find_me 
+0

Je savais que je voulais un look-ahead, mais je ne pouvais pas comprendre comment l'utiliser. Merci! –

2

Je ne suis pas sûr du moteur .ge regex, mais je ferais juste une recherche regexp pour find_me ou stop_here, puis vérifier laquelle correspondait. En perl:

if ($stuff =~ /(find_me|stop_here)/) { 
    if ($1 == "find_me") { 
    ... 
    } elsif ($1 == "stop_here") { 
    ... 
    } 
} 
+0

Je ne l'ai pas mentionné dans ma question, mais cela fait partie d'une regex plus grande, donc je préfère la réponse acceptée, mais la vôtre est certainement plus facile à lire. Merci! –

Questions connexes