2013-10-31 58 views
3

嘿,我想在MySQL中使用正則表達式來匹配行。 它需要匹配模式結束的行與任何不是數字或行尾的行。匹配可選行尾

此模式在Ruby中工作/download:223(?:[\D]|$)/ 在MySQL中它不匹配。我猜測它不允許可選的eol匹配。

SELECT id FROM stories WHERE body REGEXP 'download:223(?:[\D]|$)' 

我需要符合以下條件(行情只是爲了清楚起見):

"download:223" 
"download:223*" 
"download:223 something" 
"download:223 more text" 

而不是下面的(再次只是爲了清楚起見引號):

"download:2234" 
"download:2234 more text" 
"download:2234*" 
"download:2234* even more" 

謝謝!

+0

隨着歲末的-line,你可能意思是結尾(''')? – Teejay

+0

yeh $(行尾)作爲\ z(字符串結尾) – Rob

+0

僅當啓用多行時 – Teejay

回答

1

此正則表達式應該爲你工作:

"download:223([^0-9]|$)" 

MySQL的正則表達式引擎不支持\ d \ d等

+0

在我的無知中,我認爲他們得到了支持,謝謝!排序 – Rob

+0

不客氣,很高興它爲你解決。 – anubhava

1

MySQL正則表達式不支持非捕獲組。其餘的應該沒問題。它絕對支持$匹配字符串的結尾。此外,\ d是不支持,但你可以使用[^ 0-9]

試試這個:

SELECT id FROM stories WHERE body REGEXP 'download:223([^0-9]|$)' 

MySQL的組不捕捉,所以支持非捕獲組是不必要的。

參考來源: Using Non-Capturing Groups in MySQL REGEXP

+1

感謝您的信息,這與任何內容不匹配 – Rob

+0

啊我看你已經改變了關於\ D的答案。非常感謝您的幫助。 – Rob

+0

如果[^ [:digit:]]也起作用,那就好奇了。 – sdanzig