2011-05-26 134 views
1

我使用單詞邊界來匹配整個英文單詞。如果我匹配的字符串是純英文的,它會正常工作。如何識別以漢字混合的整個英文單詞?

例如:SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]' -> 1

但如果字符串包含任何中國文字,

例如:SELECT 'a word哈哈抓不到我吧 a' REGEXP '[[:<:]]word[[:>:]]' -> 0

我怎樣才能讓我的查詢更加智能,以便趕上英文單詞與中國藏話?

我想REGEXP '[[:<:]]word[[:>:]] | [Chinese]word[[:>:]] | [[:<:]]word[Chinese] | [Chinese]word[Chinese]'但我不知道如何使用Unicode點MySQL的正則表達式...

回答

0

可以使用轉義「U」加上unicode的十六進制正則表達式,在大多數語言的Unicode字符(如\u0041是'A')。然後你可以匹配一個unicode範圍。這是所有資金基本拉丁字母即A-Z:

[\u0041-\u005A] 

Good resource

務必仔細檢查您的編碼了。

一個例子來匹配'a word哈哈抓不到我吧 a'包括空格:

.*[\u0041-\u0054 \u0061-\u007a \u0020].* 

在ASCII,這將是:

.*[A-Za-z ].* 
+1

這的確是大多數語言是正確的,但我不認爲MySQL的REGEXP支持此。 – 2011-05-26 16:32:50

+0

當您嘗試我的正則表達式時,輸出是什麼? – krs1 2011-05-26 16:36:40

+0

我需要它匹配整個單詞,所以我將它改爲''。* word。*'',它會因爲前後的'。*'而變得貪婪。 – 2011-05-26 17:15:25