Mysql Regexp搜索记录包含一些特定的单词

时间:2012-09-14 15:56:31

标签: mysql regex

我想使用mysql选择所有记录 ONLY

这些词语:

4ahhyes4,4ahh4,4ahaa4,空格和圆点。

这是我的查询。

SELECT * FROM p_posts WHERE post_content REGEXP '^(4ahhyes4|4ahh4|4ahaa4|\.|\s)+$';

但它匹配所有记录与其他字符(就像LIKE语法):

abcde 4ahhyes4 4ahhyes4 4ahhyes4 ~> failed because abcde
123sdasd 4ahhyes4 ..... ~> failed because 123sdasd
4ahhyes4 4ahhyes4.... ..... ~> OK

如何只匹配包含这些单词的记录?

2 个答案:

答案 0 :(得分:4)

正如REGEXP运算符的定义所述:

  

注意
  因为MySQL在字符串中使用C转义语法(例如,“ \n ”来表示换行符),所以必须加倍“ \ “您在REGEXP字符串中使用的内容。

String Literals上的文档说明:

  

MySQL识别Table 9.1, “Special Character Escape Sequences”中显示的转义序列。对于所有其他转义序列,将忽略反斜杠。也就是说,转义字符被解释为好像它没有被转义。例如,“ \x ”只是“ x ”。

因此,您当前匹配的模式为^(4ahhyes4|4ahh4|4ahaa4|.|s)+$。你应该这样做:

SELECT *
FROM   p_posts
WHERE  post_content REGEXP '^(4ahhyes4|4ahh4|4ahaa4|\\.|\\s)+$'

答案 1 :(得分:-1)

WHERE post_content IN ( '4ahhyes4', '4ahh4', '4ahaa4', 'white space and dot' )不是吗?