我想寫一個正則表達式來檢測腳本(=)中的賦值,當它應該是相等的(==)。我在Java中的以下內容:檢測作業
Pattern p = Pattern.compile("[^=]=[^=]");
這將返回true:
3210這返回false:
p.matcher("a = b").matches();
我很爲難,以這裏發生了什麼,誰能告訴我爲什麼第二個表達式不匹配?
謝謝!
我想寫一個正則表達式來檢測腳本(=)中的賦值,當它應該是相等的(==)。我在Java中的以下內容:檢測作業
Pattern p = Pattern.compile("[^=]=[^=]");
這將返回true:
3210這返回false:
p.matcher("a = b").matches();
我很爲難,以這裏發生了什麼,誰能告訴我爲什麼第二個表達式不匹配?
謝謝!
[^=]
將只匹配一個字符不是一個=
,你可能要匹配一個或多個,像這個:
[^=]+=[^=]+
該字符類之後的+
意味着重複上一個元素一次或多次。
[^=]
完全匹配班級中的一個字符。你想要"[^=]+=[^=]+"
。響應
編輯評論:如果你只是想跳過空格,你可以有像"[^\s=]+\s*=\s*[^\s=]+"
這裏的「問題」是Java與完整字符串匹配,就好像在其他語言中給出了開始和結束錨點(^[^=]=[^=]$
)。
你必須知道,並相應地調整模式。
"[^=]=[^=]"
相配3個字符。
「A = B」 ==>明顯
「A = B」 的a
從[^=]
匹配則模式需要=
==>圖案失敗。
Matcher.matches()只針對整個輸入字符串進行測試。
你想要Matcher.find(),它會找到部分匹配。
雖然不會像這樣:「a b = c d」這可能是不需要的。 – Blim