Вы не должны использовать блоки Unicode, когда вы имеете в виду сценарии Unicode.Например, символ ฿, представляющий собой кодовую точку U + 0E3F ТАЙСКОГО ВАЛЮТНОГО СИМВОЛА BAHT в Юникоде, представляет собой символ \p{Block=Thai}
ᴀᴋᴀ \p{InThai}
, но не является символом \p{Script=Thai}
ᴀᴋᴀ \p{IsThai}
.Это символ валюты набора \p{Script=Common}
.
Это особенно верно для больших наборов, таких как греческий.В греческом блоке есть 18 кодовых точек, которых нет в греческом алфавите, и в греческом алфавите есть 250 кодовых точек, которых нет в греческом блоке.
К счастью, вам не о чем беспокоитьсяо тех, кто здесь с тайским языком, так как начиная с Unicode 6.0, только U + 0E3F является выбросом здесь.Вам вдвойне повезло, потому что стандартная Java не поддерживает сценарии Unicode до Java 7;странно, но верно.Для поддержки сценариев Unicode в выпусках, предшествующих JDK7, вы должны использовать JNI для доступа к библиотеке регулярных выражений ICU, как это делает Google для Java на Android.Однако у их подхода есть много преимуществ, поэтому, хотя это JNI, стоит подумать.