2011-07-25 51 views
0

我想寫一個正則表達式來檢測腳本(=)中的賦值,當它應該是相等的(==)。我在Java中的以下內容:檢測作業

Pattern p = Pattern.compile("[^=]=[^=]"); 

這將返回true:

​​3210

這返回false:

p.matcher("a = b").matches(); 

我很爲難,以這裏發生了什麼,誰能告訴我爲什麼第二個表達式不匹配?

謝謝!

回答

4

[^=]將只匹配一個字符不是一個=,你可能要匹配一個或多個,像這個:

[^=]+=[^=]+ 

該字符類之後的+意味着重複上一個元素一次或多次。

3

[^=]完全匹配班級中的一個字符。你想要"[^=]+=[^=]+"。響應

編輯評論:如果你只是想跳過空格,你可以有像"[^\s=]+\s*=\s*[^\s=]+"

+0

雖然不會像這樣:「a b = c d」這可能是不需要的。 – Blim

0

這裏的「問題」是Java與完整字符串匹配,就好像在其他語言中給出了開始和結束錨點(^[^=]=[^=]$)。

你必須知道,並相應地調整模式。

"[^=]=[^=]"相配3個字符。

  1. 「A = B」 ==>明顯

  2. 「A = B」 的a[^=]匹配則模式需要= ==>圖案失敗。