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">&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])) \B: (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\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!