我还不熟悉java正则表达式。我想验证具有以下格式的字符串:
String INPUT = "[name1 value1];[name2 value2];[name3 value3];";
namei和valuei是字符串应包含任何期望空格的字符。
我尝试了这个表达式:
String REGEX = "([\\S*\\s\\S*];)*";
但是如果我调用matches(),即使是一个好的String,我也总是假的。
它最好的正则表达式是什么?
答案 0 :(得分:3)
这就是诀窍:
(?:\[\w.*?\s\w.*?\];)*
如果您只想匹配其中的三个,请将最后的*
替换为{3}
。
说明:
(?:
:启动非捕获组
\[
:转义[
符号,这是正则表达式中的元字符。这个
允许它用于匹配。
\w.*?
:懒惰地匹配任何单词[a-z][A-Z][0-9]_
。延迟匹配意味着它尝试尽可能少地匹配字符,在这种情况下意味着何时会在找到以下\s
后停止匹配。
\s
:匹配一个空格
\]
:请参阅\[
;
:匹配一个分号
)
:非捕获组的结束
*
:匹配前一个非捕获组中包含的任意数量的内容。
答案 1 :(得分:0)
你应该逃避方括号。另外,如果您的目标是仅匹配三个,请将*
替换为{3}
(\[\\S*\\s\\S*\];){3}