2011-08-15 81 views
1

我需要查找表中僅包含特定日語UTF-8字符的所有條目。REGEX在MySQL中查找日文匹配

例如,我想要所有隻包含1(一)和2(二)的字段。

我使用

SELECT combi_id, keb FROM combi WHERE keb REGEXP '[二一]+' 

但它匹配許多包含不同的字符等領域,有什麼我做錯了嗎?

這是表:

CREATE TABLE IF NOT EXISTS `combi` (
     `combi_id` int(11) NOT NULL auto_increment, 
     `ent_seq` int(11) NOT NULL, 
     `reb` text NOT NULL, 
     `keb` text NOT NULL, 
     `ant` text NOT NULL, 
     `ke_pri` text NOT NULL, 
     `re_pri` text NOT NULL, 
     `re_restr` text NOT NULL, 
     `stagr` text NOT NULL, 
     `s_inf` text NOT NULL, 
     `lsource` text NOT NULL, 
     `gloss` text NOT NULL, 
     `xref` text NOT NULL, 
     `stagk` text NOT NULL, 
     PRIMARY KEY (`combi_id`) 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=146740 ; 

,這是數據的樣本行:

(22, 1000225, 'あからさま', '明白|偸閑|白地', '', '', '', '', '', '', '', 'plain|frank|candid|open|direct|straightforward|unabashed|blatant|flagrant', '', ''), 

非常感謝您的幫助!

+0

我固定的這個問題[問這個問題不同] [1]。 [1]:http://stackoverflow.com/questions/7067566/unicode-in-mysql-regex – uncovery

回答

1

如果你想與只有這些字符匹配列,你應該使用

SELECT combi_id, keb FROM combi WHERE keb REGEXP '^[二一]+$' 

注^在開始,並在年底的$,意思分別是「字符串的開始」和「字符串結尾「。沒有這些,正則表達式可以匹配任何位置。

編輯:測試它

mysql> select * from test; 
+--------+ 
| f1  | 
+--------+ 
| 二  | 
| 東京 | 
| 人  | 
| 丸  | 
+--------+ 
4 rows in set (0.00 sec) 

mysql> select * from test where f1 regexp _utf8'[一二]'; 
+--------+ 
| f1  | 
+--------+ 
| 二  | 
| 東京 | 
| 人  | 
| 丸  | 
+--------+ 
4 rows in set (0.00 sec) 

哇,的確,在MySQL的正則表達式字符類聲音嚴重損壞...... 這工作,但:

mysql> select * from test where f1 regexp _utf8'(一|二)'; 
+------+ 
| f1 | 
+------+ 
| 二 | 
+------+ 
1 row in set (0.00 sec) 
+2

感謝您的輸入!問題是這個匹配的結果也是 京,人,亀,丸 – uncovery

+0

在一些測試後編輯我的帖子...它看起來像MySQL是壞的。您仍然可以使用|運營商,它似乎工作正常。 –

+0

這裏的問題是它只能工作一半。如果你的樣本足夠大,仍然有一些誤報。我現在所做的是用MySQL REgex預過濾,然後用PHP正則表達式迭代結果。看起來,mysql至少會列出所有正確的條目以及一些可以在另一輪中過濾掉的錯誤條目。 – uncovery