java中的regex新手=)
我希望看到输出:
aaaa
222212
adasas
我真正看到的是:
aaaa 222212 adasas
aaaa
222212
代码告诉更多文本,所以这是我的代码:
String sToPars = "aaaa 222212 adasas";
Pattern p = Pattern.compile("(^[A-Za-z]+)( [0-9]+)( [A-Za-z]+)");
Matcher matcher = p.matcher(sToPars);
matcher.find();
for(int i = 0; i < matcher.groupCount();i++){
System.out.println(matcher.group(i));
}
http://docs.oracle.com/javase/tutorial/essential/regex/groups.html我在这里想念的是什么..
答案 0 :(得分:4)
在matcher
对象中,第一组(索引0
)是完全匹配。
之后,matcher
的索引1
组是正则表达式第一个捕获组的结果,索引2
是第二个,等等......
要查看您想要的内容,您需要将循环更改为:
for(int i = 1; i <= matcher.groupCount();i++)
答案 1 :(得分:0)
group(0)会给你整个字符串。
我修改了for循环。请检查这是否有效
for(int i = 0; i <= matcher.groupCount();i++){
System.out.println(matcher.group(i));
}
基本上组(3)永远不会被你的for循环查询
答案 2 :(得分:0)
Pattern regex = Pattern.compile("^([\\w ]+)$", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
for (int i = 1; i <= regexMatcher.groupCount(); i++) {
// matched text: regexMatcher.group(i)
// match start: regexMatcher.start(i)
// match end: regexMatcher.end(i)
}
/*
aaaa
222212
adasas
*/