Rumah >Java >javaTutorial >Apakah persamaan Unicode-aware untuk \w dan \b Java dalam ungkapan biasa?

Apakah persamaan Unicode-aware untuk \w dan \b Java dalam ungkapan biasa?

DDD
DDDasal
2024-12-13 14:55:14552semak imbas

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

Kesamaan Unikod untuk w dan b dalam Ungkapan Biasa Java?

Regeks Java mempunyai trengkas kelas aksara terhad (w dan b) berbanding dengan yang lain pelaksanaan regex moden. Di Java, w hanya sepadan dengan [A-Za-z0-9_], mengehadkan keupayaan padanan perkataan. Selain itu, semantik sempadan perkataan b menyimpang daripada takrifan w dan Unicode.

Setara Unicode-Aware

Nasib baik, persamaan Unicode-aware tersuai telah dibangunkan untuk mengatasi batasan ini . Berikut ialah penggantian:

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

Memahami Sempadan (b dan B)

Sempadan sepadan dengan kedudukan di mana aksara perkataan beralih kepada aksara bukan perkataan atau sebaliknya. Sempadan ditakrifkan sebagai:

IF follows word
THEN doesn't precede word
ELSIF doesn't follow word
THEN does precede word

Diterjemahkan ke dalam sintaks regex:

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

Begitu juga, bukan sempadan (B) bersamaan ialah:

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

Menggabungkan Sokongan Unikod dalam Java

Kepada menggabungkan persamaan Unicode ini ke dalam regex Java anda, anda boleh menggunakan fungsi penulisan semula rentetan untuk mengubah corak sebelum penyusunan. Berikut ialah contoh menggunakan fungsi tersuai yang dipanggil tulis semula:

String rewrittenPattern = rewrite(originalPattern);
Pattern compiledPattern = Pattern.compile(rewrittenPattern);

Atas ialah kandungan terperinci Apakah persamaan Unicode-aware untuk \w dan \b Java dalam ungkapan biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn