Maison > Java > javaDidacticiel > Quels sont les équivalents Unicode pour \w et \b de Java dans les expressions régulières ?

Quels sont les équivalents Unicode pour \w et \b de Java dans les expressions régulières ?

DDD
Libérer: 2024-12-13 14:55:14
original
496 Les gens l'ont consulté

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

Équivalents Unicode pour w et b dans les expressions régulières Java ?

Les expressions rationnelles Java ont des raccourcis de classe de caractères limités (w et b) par rapport aux autres implémentations modernes de regex. En Java, w correspond uniquement à [A-Za-z0-9_], ce qui limite les capacités de correspondance de mots. De plus, la sémantique des limites des mots de b s'écarte des définitions de w et d'Unicode.

Équivalents compatibles Unicode

Heureusement, des équivalents personnalisés compatibles Unicode ont été développés pour surmonter ces limitations. . Voici les remplacements :

\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*)
Copier après la connexion

Comprendre les limites (b et B)

Les limites correspondent aux positions où les caractères de mots passent aux caractères non-mots ou vice versa. Une limite est définie comme :

IF follows word
THEN doesn't precede word
ELSIF doesn't follow word
THEN does precede word
Copier après la connexion

Traduit en syntaxe regex :

(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
Copier après la connexion

De même, l'équivalent non-frontière (B) est :

(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))
Copier après la connexion

Incorporation du support Unicode dans Java

Pour incorporer ces équivalents Unicode dans votre Java regex, vous pouvez utiliser une fonction de réécriture de chaîne pour transformer le modèle avant la compilation. Voici un exemple utilisant une fonction personnalisée appelée rewrite :

String rewrittenPattern = rewrite(originalPattern);
Pattern compiledPattern = Pattern.compile(rewrittenPattern);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal