Zum besseren Verständnis wenden wir die drei Ausdrücke plus eine Erfassungsgruppe an und analysieren jedes Verhalten.
()
Erfassungsgruppe - Der reguläre Ausdruck in der Klammer muss übereinstimmen, und die Übereinstimmung muss eine Erfassungsgruppe erstellen
(?:)
Nicht erfassende Gruppe - Der reguläre Ausdruck in der Klammer muss übereinstimmen, erstellt jedoch keine erfassende Gruppe
(?=)
positiver Blick nach vorne - behauptet, dass der reguläre Ausdruck übereinstimmen muss
(?!)
negativer Blick nach vorne - behauptet, dass es unmöglich ist, den regulären Ausdruck zu erreichen
Lassen Sie uns beantragen q(u)i
, um zu beenden . q
stimmt mit q überein und die Erfassungsgruppe u
stimmt mit u überein . Die Übereinstimmung innerhalb der Erfassungsgruppe wird genommen und eine Erfassungsgruppe wird erstellt. Also geht der Motor weiter i
. Und i
passt auf i . Dieser letzte Matchversuch ist erfolgreich. qui wird abgeglichen und eine Erfassungsgruppe mit u erstellt.
Lassen Sie uns beantragen q(?:u)i
, um zu beenden . Wieder q
stimmt mit q überein und die nicht erfassende Gruppe u
stimmt mit u überein . Die Übereinstimmung aus der nicht erfassenden Gruppe wird übernommen, aber die erfassende Gruppe wird nicht erstellt. Also geht der Motor weiter i
. Und i
passt auf i . Dieser letzte Matchversuch ist erfolgreich. qui ist abgestimmt
Lassen Sie uns beantragen q(?=u)i
, um zu beenden . Der Lookahead ist positiv und wird von einem weiteren Token gefolgt. Wieder q
stimmt mit q und u
mit u überein . Auch hier muss die Übereinstimmung vom Lookahead verworfen werden, damit der Motor von i
der Zeichenfolge zu u zurücktritt . Der Lookahead war erfolgreich, daher fährt der Motor fort i
. Aber i
nicht mithalten können u . Dieser Matchversuch schlägt also fehl.
Lassen Sie uns beantragen q(?=u)u
, um zu beenden . Der Lookahead ist positiv und wird von einem weiteren Token gefolgt. Wieder q
stimmt mit q und u
mit u überein . Die Übereinstimmung vom Lookahead muss verworfen werden, damit der Motor von u
der Zeichenfolge zurück zu u tritt . Der Lookahead war erfolgreich, daher fährt der Motor fort u
. Und u
passt auf u . Dieser Matchversuch ist also erfolgreich. qu ist abgestimmt
Lassen Sie uns beantragen q(?!i)u
, um zu beenden . Auch in diesem Fall ist Lookahead positiv (weil i
es nicht übereinstimmt) und wird von einem weiteren Token gefolgt. Wieder q
stimmt mit q überein und i
stimmt nicht mit u überein . Die Übereinstimmung vom Lookahead muss verworfen werden, damit der Motor von u
der Zeichenfolge zurück zu u tritt . Der Lookahead war erfolgreich, daher fährt der Motor fort u
. Und u
passt auf u . Dieser Matchversuch ist also erfolgreich. qu ist abgestimmt
Zusammenfassend geht es also um den wirklichen Unterschied zwischen Lookahead- und Nicht-Capturing-Gruppen, wenn Sie nur die Existenz testen oder das Match testen und speichern möchten. Erfassungsgruppen sind teuer, verwenden Sie sie also mit Bedacht.