Heim > Java > javaLernprogramm > Was sind die Unicode-fähigen Äquivalente für Javas \w und \b in regulären Ausdrücken?

Was sind die Unicode-fähigen Äquivalente für Javas \w und \b in regulären Ausdrücken?

DDD
Freigeben: 2024-12-13 14:55:14
Original
493 Leute haben es durchsucht

What are the Unicode-aware equivalents for Java's w and b in regular expressions?

Unicode-Äquivalente für w und b in regulären Java-Ausdrücken?

Java-Regexes haben im Vergleich zu anderen nur begrenzte Zeichenklassenkürzel (w und b). moderne Regex-Implementierungen. In Java stimmt w nur mit [A-Za-z0-9_] überein, wodurch die Wortübereinstimmungsfunktionen eingeschränkt werden. Darüber hinaus weicht die Wortgrenzensemantik von b von den Definitionen von w und Unicode ab.

Unicode-fähige Äquivalente

Glücklicherweise wurden benutzerdefinierte Unicode-fähige Äquivalente entwickelt, um diese Einschränkungen zu überwinden . Hier sind die Ersetzungen:

\s: [\u0009-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]
\S: [^\u0009-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]

\v: [\u000A-\u000D\u0085\u2028\u2029]
\V: [^\u000A-\u000D\u0085\u2028\u2029]

\h: [\u0009\u0020\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]
\H: [^\u0009\u0020\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]

\w: [\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]]
\W: [^\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]]

\b: (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]]))
\B: (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]]))

\d: \p{Nd}
\D: \P{Nd}

\R: (?:(?>\u000D\u000A)|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029])
\X: (?>\PM\pM*)
Nach dem Login kopieren

Verstehen der Grenzen (b und B)

Grenzen stimmen mit Positionen überein, an denen Wortzeichen in Nicht-Wortzeichen übergehen oder umgekehrt. Eine Grenze ist definiert als:

IF follows word
THEN doesn't precede word
ELSIF doesn't follow word
THEN does precede word
Nach dem Login kopieren

Übersetzt in Regex-Syntax:

(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
Nach dem Login kopieren

Ebenso lautet das Äquivalent ohne Grenze (B):

(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))
Nach dem Login kopieren

Unicode-Unterstützung in Java integrieren

So integrieren Sie diese Unicode-Äquivalente in Ihr Java Für reguläre Ausdrücke können Sie eine Funktion zum Umschreiben von Zeichenfolgen verwenden, um das Muster vor der Kompilierung umzuwandeln. Hier ist ein Beispiel mit einer benutzerdefinierten Funktion namens rewrite:

String rewrittenPattern = rewrite(originalPattern);
Pattern compiledPattern = Pattern.compile(rewrittenPattern);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas sind die Unicode-fähigen Äquivalente für Javas \w und \b in regulären Ausdrücken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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