2014-03-26 22 views
2

我在使用正則表達式從我的MySQL表中選擇一些結果時遇到了問題。從正則表達式中得到錯誤'重複運算符操作數無效'在Mysql中

我使用這個查詢

select id, orderid, `desc` 
from paymentlog 
where `desc` REGEXP '[^.]*(?:_SVD(\d*))[[:>:]]' 

它說

#1139 - 從正則表達式得到錯誤 '重複的操作員操作無效'

此正則表達式與效果很好我的其他編輯/驗證人。

任何意見非常讚賞。

+3

'(:)'沒有多大意義的MySQL – zerkms

+0

另外'\ D'並不意味着你的想法! – ruakh

回答

5

MySQL regular expressions不支持Perl-Compatible Regular Expressions的完整語法。

在MySQL中不支持(?:)分組語法。該語法用於不帶反向引用的分組。但在MySQL中並不重要,因爲MySQL不支持反向引用(與此相關,MySQL沒有正則表達式替換函數)。

事實上,在你的例子中你不需要任何parens。

正如@ruakh所說,\d不是匹配數字的代碼。你需要在MySQL中使用POSIX字符類。

所以,你的表情應該是這樣的:

where `desc` REGEXP '_SVD[:digit:]*[[:>:]]' 

我也離開了你[^.]*,因爲它並不在此表達的關係。您不匹配字符串的開頭,因此即使您在模式的其餘部分之前確實有.,該類的字符也會成功匹配。你可能意味着只有當你有非點的字符匹配從字符串的開始,是這樣的:

where `desc` REGEXP '^[^.]*_SVD[:digit:]*[[:>:]]' 
+0

此表達式不會拋出錯誤,但它與我的字符串「我的風格002_SVD1455466」不匹配。特別是單詞的結尾不起作用。 – user2289228

+0

最後,表達式是^ [^%] * _ SVD [0-9] + $以匹配我的字符串 – user2289228

相關問題