2016-07-08 7 views
2

Ich habe einige Probleme zu verstehen, wie man Lookbehind in Regex verwendet. Ich brauche alle zwischen dem ersten vorhergehenden Auftreten übereinstimmen von myMethod und somethingelseRegex Reverse Lookbehind

Beispiel https://regex101.com/r/lF8yT0/4

public myMethod 
do something 

private myMethod 
do somethingelse 


(?s)(?<=(myMethod){1})(.*)somethingelse 

Wählt alle von oben, während ich

nur erwarten
private myMethod 
do somethingelse 
+0

Warum sollten Sie 'foo bar' als Übereinstimmung für Ihre Regex erwarten? Kannst du deine Logik klären? Das von Ihnen angegebene Regex101-Beispiel scheint etwas anderes zu zeigen. –

+0

Ich verbesserte das Beispiel. –

Antwort

0

können Sie verwenden ein tempered greedy token:

[^\r\n]*myMethod((?:(?!myMethod).)*?)somethingelse 
       ^^^^^^^^^^^^^^^^^^^ 

die See regex demo

Die ersten [^\r\n]* Streichhölzer 0+ Zeichen andere als CR/LF (da Sie den Anfang der Zeile in Ihrem Spielergebnis erwarten) und (?:(?!myMethod).)*? entspricht 0 Zeichen (so wenig wie möglich), die keinen myMethod Teilstring starten.