特定名称\值格式的Java正则表达式

时间:2016-07-28 08:16:54

标签: java regex

我还不熟悉java正则表达式。我想验证具有以下格式的字符串:

String INPUT = "[name1 value1];[name2 value2];[name3 value3];"; 

namei和valuei是字符串应包含任何期望空格的字符。

我尝试了这个表达式:

String REGEX = "([\\S*\\s\\S*];)*";

但是如果我调用matches(),即使是一个好的String,我也总是假的。

它最好的正则表达式是什么?

2 个答案:

答案 0 :(得分:3)

这就是诀窍:

(?:\[\w.*?\s\w.*?\];)*

如果您只想匹配其中的三个,请将最后的*替换为{3}

说明:

  • (?::启动非捕获组

  • \[:转义[符号,这是正则表达式中的元字符。这个 允许它用于匹配。

  • \w.*?:懒惰地匹配任何单词[a-z][A-Z][0-9]_。延迟匹配意味着它尝试尽可能少地匹配字符,在这种情况下意味着何时会在找到以下\s后停止匹配。

  • \s:匹配一个空格

  • \]:请参阅\[

  • ;:匹配一个分号

  • ):非捕获组的结束

  • *:匹配前一个非捕获组中包含的任意数量的内容。

See this link for demonstration

答案 1 :(得分:0)

你应该逃避方括号。另外,如果您的目标是仅匹配三个,请将*替换为{3}

(\[\\S*\\s\\S*\];){3}