我需要在一个表中找到所有只包含某些日语UTF-8字符的条目。
例如,我希望所有字段仅由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', '', ''),
非常感谢你的帮助!
最佳答案
如果只想将列与这些字符匹配,则应使用
SELECT combi_id, keb FROM combi WHERE keb REGEXP '^[二一]+$'
注意开头的^和结尾的$,分别表示“字符串的开始”和“字符串的结束”。没有这些,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 regexps中的字符类听起来很糟糕。。。
不过,这是可行的:
mysql> select * from test where f1 regexp _utf8'(一|二)';
+------+
| f1 |
+------+
| 二 |
+------+
1 row in set (0.00 sec)
关于mysql - MySQL中的REGEX查找日语匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7065994/