长度匹配在Java正则表达式
我的代码:
Pattern pattern = Pattern.compile("a?");
Matcher matcher = pattern.matcher("ababa");
while(matcher.find()){
System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
}
输出:
0[a]1
1[]1
2[a]3
3[]3
4[a]5
5[]5
我知道的 :
Java API说:
我想知道的是:
这个?
是一个贪婪的量词,因此它会先尝试匹配1次出现,然后再尝试0次出现。 在你的字符串中,
这比这更复杂一些,但这是主要想法。 当1次出现不匹配时,它会尝试0次出现。
至于开始,结束和组的值,它们将会是匹配开始的位置,结束和组匹配的内容,因此在字符串的第一个0匹配匹配中,会得到1,1,并且该字符串。 我不确定这真的会回答你的问题。
遍历几个例子会清除matcher.find()
的功能:
正则表达式引擎从字符串中获取一个字符(即,ababa),并尝试查找您正在寻找的字符串中的模式是否可以找到。 如果模式存在,那么(如API所述):
matcher.start()返回起始索引,matcher.end()返回匹配的最后一个字符后的偏移量。
如果匹配不存在。 然后start()和end()返回相同的索引,这符合匹配的长度为零。
看下面的例子:
// Searching for string either "a" or ""
Pattern pattern = Pattern.compile("a?");
Matcher matcher = pattern.matcher("abaabbbb");
while(matcher.find()){
System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
}
输出:
0[a]1
1[]1
2[a]3
3[a]4
4[]4
5[]5
6[]6
7[]7
8[]8
// Searching for string either "aa" or "a"
Pattern pattern = Pattern.compile("aa?");
Matcher matcher = pattern.matcher("abaabbbb");
while(matcher.find()){
System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
}
输出:
0[a]1
2[aa]4
链接地址: http://www.djcxy.com/p/76991.html