【发布时间】:2015-06-03 05:34:29
【问题描述】:
我有逗号分隔的字符串值。每个字符串都可以包含字符或数字以及“-”或“/”或“.”。
我的代码如下:
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*([0-9a-zA-Z\\-\\_\\.])*\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
// further logic
}
...
...
这里 if 条件总是返回 false 值,因为正则表达式匹配失败。我使用regexper 验证了正则表达式。看起来不错。
你能告诉我这里有什么问题吗?
更新:使用 Avinash 提供的正则表达式,匹配有效。但是发现组失败了。代码如下:
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*\\s*([0-9a-zA-Z\\-\\_\\.])*\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
while (matcher.find()) {
System.out.println(matcher.group());
}
}
...
...
更新:在 Avinash 提供新的正则表达式后,尝试查找单独的组。但逗号也被视为字符串的一部分。代码如下:
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.]+)((?:,\\s*[0-9a-zA-Z\\-\\_\\.]*)*)\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
for (int index=1; index<=matcher.groupCount(); ++index) {
System.out.println(matcher.group(index));
}
}
...
...
输出是:
df1_apx.fhh.irtrs.d.rrr
, ffd1-afp.farr.d.rrr.asgd
我只需要找到匹配的字符串值。
【问题讨论】:
-
您不允许在字符串中使用空格。
-
matcher.find用于在输入字符串中多次查找您的正则表达式(在您的情况下只有一个匹配项)。matcher.group()提供整个比赛以访问各个组使用matcher.group(int index)
标签: java regex string match comma