2009-06-19 4 views
1

ich einen regulären Ausdruck verwenden möchten, finden eine bestimmte Zeichenfolge in meiner Probe zu finden, aber ich möchte die Regex scheitern, wenn ich zum ersten Mal eine andere Zeichenfolge finden. Lassen Sie mich ein Beispiel geben:Wie mache ich eine Regex nicht überein, wenn ich zum ersten Mal etwas unerwünschte

Spiel find_me nur, wenn wir nicht zuerst stop_here begegnen. (. Mir ist es egal, ob stop_here später in der Probe auftritt)

So sollte dieses Spiel:

blah blah find_me blah stop_here

aber dies sollte nicht:

blah blah stop_here blah find_me

(ich bin mit der .NET Regex-Engine)

Antwort

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

Ich wusste, dass ich eine Vorausschau wollte, aber ich konnte nicht herausfinden, wie man es benutzt. Vielen Dank! –

2

Ich bin mir der .NET-Regex-Engine nicht sicher, aber ich würde einfach eine regexp-Suche nach find_me oder stop_here durchführen und dann prüfen, welche Übereinstimmung gefunden wurde. In Perl:

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

Ich habe es in meiner Frage nicht erwähnt, aber das ist eigentlich Teil einer größeren Regex, also bevorzuge ich die akzeptierte Antwort, aber deine ist sicherlich einfacher zu lesen. Vielen Dank! –

Verwandte Themen