É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">&&\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*)
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
Traduit en syntaxe regex :
(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
De même, l'équivalent non-frontière (B) est :
(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))
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);
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!