匹配Java中的Thai Script字符

ala*_*mar 3 java regex unicode thai

在过去的两个小时里,我有很多性感的时间,泰语脚本字符串在我的数据库中滑落.他们神秘地整理,输出时变异,没有自然秩序而且是一场灾难.

我想忽略任何带有Thai Script字符的字符串,但我不知道如何:

Pattern.compile("\\p{Thai}")在init上失败."[?-?]" - 那会不会有用?什么是正确的方法?

axt*_*avt 9

Thai是一个Unicode块,Unicode块应指定为\p{In...}:

Pattern.compile("\\p{InThai}") 
Run Code Online (Sandbox Code Playgroud)


tch*_*ist 5

如果您指的是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也值得考虑.