2011-03-18 38 views
3

在過去的兩個小時裏,我有很多性感時間,泰國腳本字符串在我的數據庫中滑落。他們神祕地整理,產出時變異,沒有自然秩序,並且是一場災難。在Java中匹配泰國腳本字符

我只想忽略與泰文字符的任意字符串,但我不知道如何:

Pattern.compile("\\p{Thai}")失敗的初始化。 "[ก-๛]" - 會有用嗎?什麼是正確的方法?

+1

*「我有很多性感的時間......」*你確定*性感*是你在那裏尋找的詞嗎? – 2011-03-18 12:42:53

+0

我指的是http://www.urbandictionary.com/define.php?term=sexy+time – alamar 2011-03-21 14:01:20

+0

沒有看到如何適用,但沒關係...... :-) – 2011-03-21 15:36:07

回答

6

Thai是Unicode塊和Unicode塊應被指定爲\p{In...}

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

+1剛試過一個測試編譯/運行在確定和刪除我的答案之前確定。 「模式」對上述情況感到滿意。 – 2011-03-18 12:48:44

+1

@Daniel:從去年開始統一碼率爲6.0時的Unicode 3.0列表有什麼好處? :( – tchrist 2011-03-18 13:20:37

5

當你的意思是Unicode編碼,則不應使用Unicode塊。例如,代碼點U + 0E3F以統一碼形式存在的฿是\p{Block=Thai}ᴀᴋᴀ\p{InThai}字符,但它不是\p{Script=Thai}ᴀᴋᴀ\p{IsThai}字符。這是\p{Script=Common}集的貨幣符號。

對於像希臘這樣的大集合,這尤其如此。希臘語塊中有18個代碼點不在希臘語腳本中,希臘腳本中有250個代碼點不在希臘語塊中。

幸運的是,您不必擔心泰國人,因爲從Unicode 6.0起,只有U + 0E3F在這裏是一個離羣值。你真的很幸運,因爲標準Java在Java 7之前不支持Unicode腳本;離奇但真實。對於早於JDK7版本的Unicode腳本支持,您必須使用JNI才能訪問ICU正則表達式庫,就像Google對Android上的Java所做的一樣。儘管它的應用有很多好處,但即使它是JNI,也值得考慮。

+0

我知道這個問題是關於Java的,但是對於Perl,晚於5.6的版本'\ p {Script = Thai}'可以寫成'\ p {Thai}'('\ p {IsThai}'也適用於向後兼容)。 – 2016-09-04 05:47:28