2012-09-22 39 views
2

爲什麼這個空間會有所作爲?爲什麼這個空間在這個正則表達式中很重要?

select * from beds where id~'.*Extra large.* (Red).*'; 

select * from beds where id~'.*Extra large.*(Red).*'; 

第一個返回任何和第二擔任我想要的。我想匹配的一個例子是:

"Extra large" (Red) {2012 model} 

我以爲第一個會工作,因爲有一個空間後(紅色)?

編輯:即使我用'\'轉義括號,我仍然不能有空間。

回答

4

問題是你還沒有繞過"Red"繞過括號。您正則表達式應該是:

'.*Extra large.* \(Red\).*' 

這使得支架字面括號,但沒有逃離他們,他們創建一個正則表達式組(而不是字符匹配)。

你的第一個正則表達式分組的字符Red和所需要的空間先於該組Red,所以它會匹配"... Red...",但在你輸入一個支架Red之前,所以它不匹配。

你的第二個正則表達式在Red之前接受任何字符(通過.*),所以它匹配。

3

這是因爲你沒有逃脫()

「紅色」周圍的括號會創建一個組,並且不包含在比賽中。這是 是沒有空格的正則表達式工作的原因。

在正則表達式的.*沒有空白匹配" (,然後是Red) {2012 model}後。括號由.*運營商匹配。

在正規表達式.*空白匹配"(不包括在所述圖案。

所以正確的模式應該是這樣:

.*Extra large.*\(Red\).* 
相關問題