Matching-Modus
JDK bietet drei Matching-Modi: gierig, widerstrebend und besitzergreifend, die jeweils drei besitzergreifenden Quantoren entsprechen. Der Standardmodus und der erzwungene Modus werden durch das Hinzufügen eines ? angezeigt . Der Besitzmodus wird durch Anhängen eines nach dem Ausdruck angegeben.
Was bedeuten die drei Modi?
Die Bedeutung des Greedy-Modus ist: so viele Übereinstimmungen wie möglich zu erzielen und gleichzeitig zu versuchen, die Gesamtübereinstimmung zu erreichen.
Die Bedeutung des Zurückhaltungsmodus ist: so wenig Übereinstimmung wie möglich zu erzielen und gleichzeitig zu versuchen, die Gesamtübereinstimmung zu erreichen.
Die Bedeutung des Ballbesitzmodus ist: So viele wie möglich zusammenbringen. Wenn die Anordnung aufgrund zu vieler Übereinstimmungen nicht übereinstimmen kann, gibt es kein Zurückverfolgen.
Zum Beispiel gibt es eine Zeichenfolge wie folgt:
/m/t/wd/nl/n/p/m/wd/nl/n/p/m/wd/nl/n/p/m/v/n
Ausdrucksübereinstimmung im Greedy-Modus:
/m/t.*/nl/n/p/ m
此时匹配结果为 /m/t/wd/nl/n/p/m/wd/nl/n/p/m/wd/nl/n/p/m
Zögerlicher Musterausdrucksvergleich:
/m/t/.*?/nl/n/p/m
此时匹配结果为 /m/t/wd/nl/n/p/m
/m/t /wdx ?/nl/n/p/m
Wenn dies der Fall ist, kann die Übereinstimmung nicht durchgeführt werden, da dies bedeutet, dass mindestens eine Übereinstimmung vorhanden sein muss und der erzwungene Modus mindestens eine Übereinstimmung aufweisen muss , daher schlägt das Match fehl.
Übereinstimmung von Besitzmusterausdrücken:
/m/t.* /nl/n/p/m kann derzeit nicht abgeglichen werden, da .* mit zu vielen Zeichen übereinstimmt, was zur folgenden Unable führt to match ist aktiviert.
Hinweis: Für Variablen-Matching-Regeln können nur erzwungene Quantifizierer oder Possessivquantifizierer verwendet werden. X?? bedeutet beispielsweise, dass das Zeichen X so wenig wie möglich übereinstimmt, während X? Ein weiteres Beispiel: X{n} bedeutet, dass es passend zu n Theme vorbereitet werden muss, aber die Verwendung fühlt sich so natürlich an.
Suchen eignet sich für solche Szenarien: Beim regulären Abgleich müssen Sie die Vorder- oder Rückseite des übereinstimmenden Teils kennen, unabhängig davon, ob ein bestimmter Ausdruck vorhanden ist oder nicht, ohne diese spezifischen Ausdrücke zu erfassen (zu verbrauchen).
Wenn Sie kein Lookaround verwenden, sondern direkt Ausdrücke zur Beurteilung verwenden, werden diese übereinstimmenden Ausdrücke zwangsläufig verbraucht.
Zum Beispiel: Angenommen, ich möchte den Satz ILoveYou segmentieren. Das Prinzip besteht darin, dass ein Großbuchstabe als neues Wort betrachtet wird.
Wenn Sie diese Übereinstimmungsregel verwenden:
, werden die übereinstimmenden Großbuchstaben verwendet. Das passende Ergebnis lautet: IL\p{Upper}\p{Lower}*[\p{Upper}]?
Sie
Dies entspricht nicht den Anforderungen.
Die Lösung besteht darin, Lookaround zu verwenden. Der reguläre Ausdruck lautet:
Das Ausgabeergebnis ist: I\p{Upper}?\p{Lower}*(?=[\p{Upper}]?)
Love
Es gibt vier Arten von You
Lookaround:
(?=X) bedeutet, dass das, was folgt, der reguläre Ausdruck X ist. Beim Abgleich mit dem vorherigen Teil wird der X-Teil nicht verbraucht , und es wird nicht erfasst. Positive Vorwärtsvorhersage mit Nullbreite.
(?<=X) bedeutet, dass der vorhergehende Teil der reguläre Ausdruck X ist. Bei der Übereinstimmung mit dem folgenden Teil wird der X-Teil nicht verbraucht und nicht erfasst. Reverse-Positive-Vorhersage mit Nullbreite.
(?!X) bedeutet, dass das Folgende nicht der reguläre Ausdruck X ist. Beim Abgleich mit dem vorherigen Teil wird der X-Teil nicht verbraucht und nicht erfasst. Vorwärtsnegative Vorhersage mit Nullbreite.
(?!=X) bedeutet, dass der vorhergehende Teil nicht der reguläre Ausdruck X ist. Beim Abgleich mit dem folgenden Teil wird der X-Teil nicht verbraucht und nicht erfasst. Rückwärtsnegative Vorhersage mit Nullbreite.
Nicht erfassendes Possessiv-Matching
(?>X) Dies wurde nicht eindeutig untersucht.