0

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

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

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

但这里有一个棘手的部分:最后一个分号不是强制的NAME1=VALUE1;NAME2=VALUE2所以必须接受一个类似的字符串。

有人有想法吗?

4

3 回答 3

1

您的表达式并没有真正达到预期的效果,因为一方面是贪婪的量词,另一方面是因为您使用的点几乎允许任何字符。
这应该具有您期望的行为:

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

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

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

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

于 2013-04-16T08:16:50.910 回答
0

你可以试试那个:

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

自“。”以来,您的正则表达式中也有一些错误。也匹配“=”。[^=] 表示“除“=”之外的所有内容。

于 2013-04-16T08:14:45.190 回答
0

必须是正则表达式,这可以完成这项工作吗:

 for (String pair : myString.split(";")){
    if (! ((pair.indexOf("=") > 0) && (pair.indexOf("=") < pair.length()) &&   
          ((myString.split("=").length - myString.split(";").length) < 2) ))
      return false;
 }
 return true;
于 2013-04-16T08:54:52.993 回答