2012-11-07 372 views
2

我試圖使用MySQL REGEXP找到行,其中發生在我的正則表達式使用.+REGEXP和運營商。+

​​2012

這工作:

select 'green 2012-01' REGEXP 'green.+2012' 

回報1

,但如果我把在 '2012' 第一返回0

select 'green 2012-01' REGEXP '2012.+green'; 

回報0

我使用MySQL軟件版本:5.1.43 - MySQL社區服務器(GPL)

+1

這可能是[XY問題](http://mywiki.wooledge.org/XyProblem)。你真的*試圖做什麼? – ghoti

回答

0

作爲替代REGEX,而潛在的效率不高,你可以簡單地使用LOCATE兩次。

SELECT * FROM table WHERE LOCATE('2012', column) AND LOCATE('green', column); 
+0

我使用一個輸入框來獲取搜索字符串動態地構造查詢。用戶將輸入20012 ^綠色,並將其轉換爲2012. +綠色。它的工作原理,當綠色^ 2012年進入 –

+0

你最終搜索的用戶進入每個字符串? –

+0

我連接一表的列和運行一個查詢搜索的用戶已經進入e.g綠色^ 2012的字符串。用戶將試圖找到同時具有綠色和2012年在它的行。 –

2

正則表達式有點依賴於順序。你需要做的是把一個| (或)運營商之間的兩個項目,使其尋找任何一個。

select 'green 2012-01' REGEXP '(green.*2012)|(2012.*green)' 
+1

** + 1 ** - 這是正確的,但您並不真的需要所有的括號。 – ghoti

+1

謝謝你 - 我試了一下 - 工作,但後來我刪除了空間,它沒有工作 - 選擇'green2012-01'REGEXP'(綠色。+ 2012)|(2012. +綠色)' –

+0

你會想要*(0或更多的東西),而不是。+(1或更多的東西)。我編輯了我的答案以反映這些變化。 – raykendo