den folgenden Text Gegeben:Negative Look-Ahead-vs Positive Look-Ahead-Syntax
Mein Name ist foo.
Mein Name ist Bar.
Mit dem Ziel, jede Zeile zurückzukehren ist, die enthält oder nicht, einen bestimmten Teilkette enthält, die beide der folgenden positiven und negativen regex Muster verwendet werden können, um das gleiche Ergebnis zurückgeben:
Postive Vorgriffs-: ^(?=.*bar).*$
My name is bar.
kehrt
Negative Look-Ahead: ^((?!foo).)*$
kehrt My name is bar.
jedoch, warum die negative Vorschau braucht in mehreren Sätzen verschachtelt werden Klammern mit dem Qualifier .
und dem Quantifizierer *
getrennt durch die Klammern, während sie im positiven Lookahead benachbart sein können .*
?
Danke für die zusätzlichen Informationen über temperierte gierige Token - ich wusste nicht, dass ich das gemacht habe. – singularity
Eigentlich bin ich eher enttäuscht darüber, dass der berühmte [Regular expression to match line, der kein Wort enthält?] (Http://stackoverflow.com/questions/406230/regular-expression-to-match-line Die beste Antwort verweilt auf diesem temperierten gierigen Token. Es ist nicht die beste Lösung für diese Aufgabe. Der Engpass ist der nicht verankerte Lookahead, der an * jedem Ort * in der Zeichenkette ausgeführt wird, während in meiner Antwort der Lookahead gleich beim Start ausgelöst wird und nur einmal ausgeführt wird. Und es ist genug zu sehen, ob eine Zeichenfolge das Wort hat oder nicht. –
Schöne ref! Das ist die Antwort, die mich verwirrt hat! – singularity