Java Regex以匹配逗号分隔的接口列表

时间:2016-01-20 00:00:08

标签: java regex

我正在尝试编写一个Java正则表达式来匹配以逗号分隔的接口列表。类似的东西:

Runnable, Serializable, List, Map

列表中可以有零个或多个条目。尾随逗号无效。空间是可选的。我想出了以下内容,它将我带到一个或多个条目,然后检查为空:

String validName = "[a-zA-Z_][a-zA-Z0-9_]*";
String regex = validName + "\\s*(,\\s*" + validName + ")*";
if (s.matches(regex) || s.trim().isEmpty())
  ...

但有没有办法将“零条目”条件包含在正则表达式中?

2 个答案:

答案 0 :(得分:2)

要使模式可选,请使用设置了?量词的组:

String regex = "(?:" + validName + "\\s*(?:,\\s*" + validName + ")*)?";
//              ^^^                                                ^^
if (s.matches(regex) { 
 // ....
}

?贪心量词匹配它应用的模式的一次或零次出现。 (贪婪意味着它更喜欢获得1次而不是0次) (?:字符序列打开一个非捕获组。 I.E.这就是你如何使用"正常的括号"用于逻辑分组正则表达式的部分。

您可以在模式的开头/结尾添加\\s*个子模式,以允许前导/尾随空格。

答案 1 :(得分:1)

尝试String regex = "^$|" + regex ^ $表示“在输入的开头和输入的结尾之间没有任何内容”。 ^ $ |意思是“要么匹配任何东西,要么匹配与正则表达式的其余部分相匹配的任何东西”

相关问题