Thai是一个Unicode块,Unicode块应指定为\p{In...}:
Pattern.compile("\\p{InThai}")
Run Code Online (Sandbox Code Playgroud)
如果您指的是Unicode脚本,则不应使用Unicode块.例如,฿是Unicode中的代码点U + 0E3F THAI CURRENCY SYMBOL BAHT,是一个\p{Block=Thai}ᴀᴋᴀ \p{InThai}字符,但它不是\p{Script=Thai}ᴀᴋᴀ \p{IsThai}字符.它是该\p{Script=Common}集合的货币符号.
对于像希腊这样的大型集合尤其如此.希腊语块中有18个代码点不在希腊语脚本中,希腊语中有250个代码点不在希腊语块中.
幸运的是,你不必担心使用Thai的那些,因为从Unicode 6.0开始,只有U + 0E3F才是这里的异常值.你是双重幸运的,因为标准的Java在Java 7之前不支持Unicode脚本; 奇怪但真实.对于早于JDK7的版本中的Unicode脚本支持,您必须使用JNI来访问ICU正则表达式库,就像Google对Android上的Java一样.不过,他们的应用程序有很多好处,所以即使它是JNI也值得考虑.