2012-06-26 48 views
-3

我想匹配一個模式,其中必須出現兩個單詞,但我不能讓我的正則表達式工作。模式的所有單詞必須在正則表達式

結果爲空。爲什麼?

select 'only test bla dido simple' REGEXP '^(\\?=.*\\?(simple))(\\?=.*\\?(only))*$'; 
+0

我想mutch從字符串「onty test dido簡單」的2個字(簡單而唯一),但我bekomme沒有這樣的結果:
+ ------------------ --------------------------- +
| ''只測試簡單'REGEXP'^(\\?=。* \\?(簡單))(\\?=。* \\?only))* $'
| + ---------------------------------------------- +
| 0 |
+ ---------------------------------------------- +
schweinsteiger

+2

@AbdelillahFarka,看看[這裏](http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work) –

+3

歡迎來到Stackoverflow。在你的問題中使用一些形式是有幫助的:這個系統可以作爲一個檔案來幫助其他人提出類似的問題。我編輯了你的問題來幫助你做到這一點。此外,您應該接受幫助您的答案,方法是重新查看問題並單擊該答案旁邊的綠色複選框。 –

回答

0

對於話簡單常規的正則表達式是^(?=.*\bsimple\b)(?=.*\bonly\b).*$

接受這個正則表達式mysql你必須根據需要添加轉義\個字符 - 現在是你的任務。

0

你的結果實際上是零,而不是NULL。 MySQL REGEXP運算符返回0表示不匹配,1表示匹配。 (如你所知,NULL在RDBMS的世界中有特定的含義。)

所以問題是,你的特定正則表達式匹配什麼?讓我們解構它。

'^(\\?=.*\\?(simple))(\\?=.*\\?(only))*$' 

它開始^$結束,所以它必須將整個字符串,而不是字符串匹配。

它由兩個串聯的表達,無論是形式的

(\\?=.*\\?(word)) 

據我所知,你要匹配:

  1. 一個可選的反斜線
  2. 等號
  3. 任何字符串長度爲零或更長,吞噬輸入
  4. 另一個可選的背部削減
  5. 我無法弄清楚你希望與比賽的這種複雜的順序來完成這個詞是什麼

。輸入文本中沒有任何等號。

您可以使用此語句。當然,它返回零,因爲簡單的單詞只在輸入文本中出現在單詞後面。

SELECT 'only test bla dido simple' REGEXP '^.*(simple).*(only).*$' 

MySQL不處理(?=pattern) lookahead表達式,如果這就是你想要做的。

+0

非常感謝你:-), – schweinsteiger

+0

但是我的結果是零:-( – schweinsteiger

+0

@ollie jones mysql(?= pattern)lookahead的解決方法是什麼? – shadesco

相關問題