2011-08-15 8 views
1

特定の日本語UTF-8文字のみで構成されるテーブル内のすべてのエントリを見つける必要があります。MySQLのREGEXで日本語の一致を見つける

たとえば、1(1)と2(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

関連する問題