2012-09-14 79 views
3

我想使用MySQL來選擇所有記錄都具有ONLYMysql的正則表達式搜索記錄包含一些特定的詞

這句話就可以了:

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 

如何搭配僅包含關於它只是這些話記錄?

回答

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)+$' 
+0

tks。這裏是我完成的語法: ^(4ahhyes4 | 4ahh4 | 4ahaa4 | \\。| [[:space:]])+ $ \\ s似乎不適用於mysql? – TomSawyer

-1

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

+0

沒有,何談 「4ahh4 .... 4ahh4 .... 4ahh4」? – TomSawyer

相關問題