2016-03-06 29 views
0

所以我稱一表「lu_regex」與所謂的「正則表達式」MySQL的REGEXP - 當列包含正則表達式

Select * from lu_regex; 

athedsl-\d+ 
i5[93][0-9a-fA-F]+\.versa 
5ac[a-f0-9]+.+sky 

表中包含的行1000的專欄中,各種正則表達式的語法,我在這個例子中只顯示了三個。

現在我試圖接受用戶輸入並將該輸入與表中的行進行匹配。所以我正在這樣做。

SELECT * FROM lu_regex where '5aca3a11.bb.sky.comr' regexp regex; 

regex 
5ac[a-f0-9]+.+sky 

1 row returned. 

我回來了我的預期,與該查詢,然後我嘗試這一個。

SELECT * FROM lu_regex where 'athedsl-07371.home.otenet.gr' regexp regex; 

0 rows returned. 

它應該匹配「athedsl- \ d +」,但我假設它與「\ d」有關。我甚至試圖將這個添加到數據庫「athedsl - \\ d +」,並且不會導致匹配。

我試圖堅持一個MySQL解決方案,我做錯了什麼,這應該是可能的。

+1

作爲第一次嘗試確認/弱化你的懷疑,你可以用'athedsl- [0-9] +'替換'athedsl- \ d +'。 – cFreed

+0

它被替換時匹配'athedsl- [0-9] +'。 – Henry

+0

所以這個問題真的是你懷疑的地方:'\ d'似乎不工作。我不明白爲什麼,只是現在,但我會嘗試找到一些東西......如果我不回來,你會知道我不幸運:) – cFreed

回答

0

我剛剛發現此鏈接,它看起來像一個尚未修復的錯誤。它在2013年

https://bugs.mysql.com/bug.php?id=70413

錯誤#70413 \ d證實未在REGEXP工作了MySQL查詢

我認爲解決方案將是是更換所有\ d與[0-9]

+1

這不是一個錯誤。錯誤報告似乎被錯誤地標記爲已驗證;正則表達式有不同的方言。 MySQL使用'[[:digit:]]''而不是'\ d'。這是記錄的行爲:http://dev.mysql.com/doc/refman/5.7/en/regexp.html –