我正在尝试检查字符串是否形成为NAME1=VALUE1;NAME2=VALUE2;
。
这是我到目前为止所发现的:
s.matches("^(.+=.+;)*$")
但这里有一个棘手的部分:最后一个分号不是强制性的。因此必须接受像NAME1=VALUE1;NAME2=VALUE2
这样的字符串。
有人有想法吗?
答案 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;