检测分配

时间:2011-07-25 20:07:41

标签: java regex

我正在尝试编写一个正则表达式来检测脚本(=)中的赋值,它应该是相等的(==)。我在Java中有以下内容:

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

返回true:

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

返回false:

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

我很难过这里发生的事情,有谁能告诉我为什么第二个表达不匹配?

谢谢!

4 个答案:

答案 0 :(得分:4)

[^=]只会匹配一个不是=的字符,您可能希望匹配一个或多个字符,如下所示:

[^=]+=[^=]+

字符类之后的+表示重复前一个元素一次或多次。

答案 1 :(得分:3)

[^=]只匹配班级中的一个字符。你想要"[^=]+=[^=]+"

编辑以回复评论:如果您只想跳过空格,可以使用"[^\s=]+\s*=\s*[^\s=]+"

之类的内容

答案 2 :(得分:1)

Matcher.matches()仅针对整个输入字符串进行测试。

您需要Matcher.find(),这将找到部分匹配。

答案 3 :(得分:0)

这里的“问题”是Java与完整字符串匹配,就好像在其他语言中给出了开始和结束锚点(^[^=]=[^=]$)。

您必须知道并相应地调整模式。

"[^=]=[^=]"匹配3个字符。

  1. “a = b”==>明显

  2. “a = b”a[^=]匹配,则该模式需要= ==>模式失败。