Heim > Java > javaLernprogramm > Hauptteil

Lernen regulärer Java-Ausdrücke

高洛峰
Freigeben: 2016-11-16 11:16:33
Original
1220 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

Zögerlicher Musterausdrucksvergleich:

/m/t/.*?/nl/n/p/m

此时匹配结果为 /m/t/wd/nl/n/p/m
Nach dem Login kopieren

/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}]?
Nach dem Login kopieren

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}]?)
Nach dem Login kopieren

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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage