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
DDDOriginal
2024-12-13 14:55:14552Durchsuche

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*)

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

Übersetzt in Regex-Syntax:

(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))

Ebenso lautet das Äquivalent ohne Grenze (B):

(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))

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);

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!

Stellungnahme:
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