正则表达式匹配像String这样的“PATH环境变量”

时间:2013-04-16 08:10:46

标签: java regex regex-negation

我正在尝试检查字符串是否形成为NAME1=VALUE1;NAME2=VALUE2;

这是我到目前为止所发现的:

s.matches("^(.+=.+;)*$")

但这里有一个棘手的部分:最后一个分号不是强制性的。因此必须接受像NAME1=VALUE1;NAME2=VALUE2这样的字符串。

有人有想法吗?

3 个答案:

答案 0 :(得分:1)

由于一方面贪婪的量词,你的表达并没有真正达到预期的效果,另一方面你使用的是几乎所有角色的点。
这个应该有你期望的行为:

^(\w+=\w+;)*\w+=\w+;?$

或者,如果空字符串是正确的:

^(\w+=\w+;)*(\w+=\w+;?)?$

请注意,我正在使用\ w作为限制的示例。

答案 1 :(得分:0)

你可以试试那个:

^([^=]+=[^;]+;)*([^=]+=[^;]+;?)$

你的正则表达式中也有一些错误,因为“。”也匹配“=”。 [^ =]表示“除了”=“”之外的所有内容。

答案 2 :(得分:0)

必须是RegEx,这可以做到这一点:

 for (String pair : myString.split(";")){
    if (! ((pair.indexOf("=") > 0) && (pair.indexOf("=") < pair.length()) &&   
          ((myString.split("=").length - myString.split(";").length) < 2) ))
      return false;
 }
 return true;