匹配Java中的Thai Script字符

时间:2011-03-18 12:40:53

标签: java regex unicode thai

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

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

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

2 个答案:

答案 0 :(得分:7)

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

Pattern.compile("\\p{InThai}") 

答案 1 :(得分:5)

如果您指的是Unicode脚本,则不应使用Unicode块。例如,฿是Unicode中的代码点U + 0E3F THAI CURRENCY SYMBOL BAHT,是\p{Block=Thai}ᴀᴋᴀ\p{InThai}字符,但它不是\p{Script=Thai}ᴀᴋᴀ{{1} }字符。它是\p{IsThai}集的货币符号。

对于像希腊这样的大型集合尤其如此。希腊语块中有18个代码点不在希腊语脚本中,希腊语中有250个代码点不在希腊语块中。

幸运的是,您不必担心使用Thai的那些,因为从Unicode 6.0开始,此处只有U + 0E3F才是异常值。你是双重幸运的,因为标准的Java在Java 7之前不支持Unicode脚本;奇怪但真实。对于早于JDK7的版本中的Unicode脚本支持,您必须使用JNI来访问ICU正则表达式库,就像Google对Android上的Java一样。不过,他们的应用程序有很多好处,所以即使它是JNI也值得考虑。