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
Lepaskan: 2024-12-13 14:55:14
asal
493 orang telah melayarinya

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*)
Salin selepas log masuk

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
Salin selepas log masuk

Diterjemahkan ke dalam sintaks regex:

(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
Salin selepas log masuk

Begitu juga, bukan sempadan (B) bersamaan ialah:

(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan