使用正则表达式从字符串中提取子字符串

时间:2014-11-07 17:20:07

标签: java regex

给出以下Java代码:

String test = "'abc,ab,123',,,'123,aa,abc',,,";
Pattern p = Pattern.compile("('\\w\\S+\')");
Matcher m = p.matcher(test);
boolean s = m.matches();
System.out.println(s);

我想提取''中的所有内容,例如我想要'abc,ab,123''123,aa,abc'。为什么外出是:

false

我的正则表达式如下:“查找',后跟数字或字母,后跟几个非空格字符,然后是另一个'”。应该有匹配,出了什么问题?

1 个答案:

答案 0 :(得分:3)

Matcher.matches将尝试检查正则表达式是否可以匹配整个字符串(请参阅文档here)。由于您的正则表达式最后需要',但您的字符串最后一个字符,匹配返回false。 如果要打印与正则表达式匹配的字符串的一个或多个部分,则需要先使用Matcher.find方法让正则表达式引擎本地化此匹配的子字符串。要获得下一个匹配的子字符串,您可以从同一个匹配器再次调用find。要获取所有匹配的子字符串,请调用find,直到它返回false作为响应。

尝试:

String test = "'abc,ab,123',,,'123,aa,abc',,,";
Pattern p = Pattern.compile("'[^']*'");//extract non overlapping string between single quotes
Matcher m = p.matcher(test);
while (m.find()) { //does the pattern exists in input (sub)string
  System.out.println(m.group());//print string that matches pattern
}