mysql选择regexp就像"全程"

时间:2016-07-19 15:41:22

标签: mysql regex

有那个小sql选择:

select * from import_daten WHERE lastname REGEXP 'dipl\.|dr\.';

只想用ing过滤行。和dipl。但有了这个陈述,我也得到了人们,例如" Abendroth"在姓氏。因为" dr"在名字中。

相同
select * from import_daten WHERE lastname REGEXP 'dipl.|dr.';

如何在正则表达式中包含完整的正确值?

3 个答案:

答案 0 :(得分:1)

我想你想要这个

select * from import_daten WHERE lastname REGEXP '(dipl\.)|(ing\.)';

答案 1 :(得分:1)

您可能希望确保模式位于“单词边界”。 MySQL的正则表达式语法具有特殊的字符序列:

select * from import_daten WHERE lastname REGEXP '[[:<:]](dipl\.|dr\.)[[:>:]]';

http://dev.mysql.com/doc/refman/5.7/en/regexp.html。它几乎是该页面用户评论之前页面上的最后一项。

答案 2 :(得分:1)

18/07/2016 20:04:35

小心单词的开头/结尾:

REGEXP '(dipl|dr)[.]'

注意它是如何失败的?这是因为mysql> SELECT 'dr.' REGEXP 'dr[.][[:>:]]', 'dr.' REGEXP 'dr[.]'; +-----------------------------+----------------------+ | 'dr.' REGEXP 'dr[.][[:>:]]' | 'dr.' REGEXP 'dr[.]' | +-----------------------------+----------------------+ | 0 | 1 | +-----------------------------+----------------------+ 不是可以存在于'单词'中的字符。

另外,我使用.而不是[.],因为转义转义字符的问题 - 在某些情况下你需要\.;在其他人中,您可能需要\\.。太混乱了。

如有必要,您可以使用'word start':\\\\.