给出以下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
我的正则表达式如下:“查找'
,后跟数字或字母,后跟几个非空格字符,然后是另一个'
”。应该有匹配,出了什么问题?
答案 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
}