我正在尝试编写一个正则表达式来检测脚本(=)中的赋值,它应该是相等的(==)。我在Java中有以下内容:
Pattern p = Pattern.compile("[^=]=[^=]");
返回true:
p.matcher("a=b").matches();
返回false:
p.matcher("a = b").matches();
我很难过这里发生的事情,有谁能告诉我为什么第二个表达不匹配?
谢谢!
答案 0 :(得分:4)
[^=]
只会匹配一个不是=
的字符,您可能希望匹配一个或多个字符,如下所示:
[^=]+=[^=]+
字符类之后的+
表示重复前一个元素一次或多次。
答案 1 :(得分:3)
[^=]
只匹配班级中的一个字符。你想要"[^=]+=[^=]+"
。
编辑以回复评论:如果您只想跳过空格,可以使用"[^\s=]+\s*=\s*[^\s=]+"
答案 2 :(得分:1)
Matcher.matches()仅针对整个输入字符串进行测试。
您需要Matcher.find(),这将找到部分匹配。
答案 3 :(得分:0)
这里的“问题”是Java与完整字符串匹配,就好像在其他语言中给出了开始和结束锚点(^[^=]=[^=]$
)。
您必须知道并相应地调整模式。
"[^=]=[^=]"
匹配3个字符。
“a = b”==>明显
“a = b”a
与[^=]
匹配,则该模式需要=
==>模式失败。