我在使用正則表達式從我的MySQL表中選擇一些結果時遇到了問題。從正則表達式中得到錯誤'重複運算符操作數無效'在Mysql中
我使用這個查詢
select id, orderid, `desc`
from paymentlog
where `desc` REGEXP '[^.]*(?:_SVD(\d*))[[:>:]]'
它說
#1139
- 從正則表達式得到錯誤 '重複的操作員操作無效'
此正則表達式與效果很好我的其他編輯/驗證人。
任何意見非常讚賞。
我在使用正則表達式從我的MySQL表中選擇一些結果時遇到了問題。從正則表達式中得到錯誤'重複運算符操作數無效'在Mysql中
我使用這個查詢
select id, orderid, `desc`
from paymentlog
where `desc` REGEXP '[^.]*(?:_SVD(\d*))[[:>:]]'
它說
#1139
- 從正則表達式得到錯誤 '重複的操作員操作無效'
此正則表達式與效果很好我的其他編輯/驗證人。
任何意見非常讚賞。
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:]*[[:>:]]'
此表達式不會拋出錯誤,但它與我的字符串「我的風格002_SVD1455466」不匹配。特別是單詞的結尾不起作用。 – user2289228
最後,表達式是^ [^%] * _ SVD [0-9] + $以匹配我的字符串 – user2289228
'(:)'沒有多大意義的MySQL – zerkms
另外'\ D'並不意味着你的想法! – ruakh