2014-07-07 74 views
1

我遇到查詢問題。我使用mysql作爲數據庫。我想用一個正則表達式的結果我預期匹配,並且表是在MySQL中重複匹配正則表達式重複詞

table A 

---------------------------------- 
| ID | Description   | 
---------------------------------- 
| 1 | new 2 new 2 new 2 new | 
| 2 | new 21 new 2 new  | 
| 3 | new 12th 2   | 
| 4 | 2new 2new   | 
| 5 | new2 new 2new  | 

我預計
結果 - 數字2只能說明兩次
- 字符2日前後/必須爲VARCHAR(除了後空格)

Table B 
    --------------------------------- 
    | ID | Description   | 
    --------------------------------- 
    | 4 | 2new 2new   | 
    | 5 | new2 new 2new  | 

查詢我已經走到這一步:

SELECT * FROM a WHERE 
(description REGEXP '^[^2]*2[^2]*2[^2]*$') 

click here for sqlfiddle demo

任何人都可以幫我解決這個問題嗎?

+1

你能說出你的邏輯嗎? –

+0

我期望的結果 - 數字2只能顯示兩次 - 字符在/之前/之後2必須是varchar(除了在空格之後) – muhnizar

+0

_「之前/之前的字符必須爲varchar」_是什麼意思? –

回答

2

使用下面的正則表達式來獲取第四個和第五個ID的描述。

SELECT * FROM a WHERE 
(description REGEXP '^2[^2]*2[^2]*|\w+2[^2]*2[^2]*$') 

http://sqlfiddle.com/#!2/1284e/18

說明:

  • 除以上述正則表達式爲兩個像2[^2]*2[^2]*爲一個部件並\w+2[^2]*2[^2]*作爲另一部分。在正則表達式中,^代表起點,$代表終點。
  • 2[^2]*2[^2]*

    • 2匹配數字2
    • [^2]*匹配的未2零次或多次的任何字符。
    • 2匹配號碼2.
    • [^2]*匹配任何不是零次或多次的字符。
    • 這會給你第四個ID。
  • |邏輯或操作者通常用於將兩個正則表達式,其可以在本(前)是指匹配或(後)相結合。

  • \w+2[^2]*2[^2]*

    • \w+2匹配的一個或多個單詞字符應遵循由數字2。在您的例子,第五ID滿足該正則表達式。
    • [^2]*匹配任何不是零次或多次的字符。
    • 2匹配號碼2.
    • [^2]*匹配任何不是零次或多次的字符。
    • 這會給你第5個ID。
+0

結果是正確的..但你介意給我解釋一下正則表達式的邏輯!謝謝 – muhnizar

+0

我需要你的幫助。你介意嗎? :) @AvinashRaj 我試圖改變表達式更一般(限於所有數字)
[sql小提琴演示](http://sqlfiddle.com/#!2/fcc49/1)
但不知何故,我總是得到錯誤的結果。
不好意思打擾你了! – muhnizar

+0

@muhnizar你想要相同的ID4和ID5值嗎? –