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">&&\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*)
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!