[英]Zero-length matches in Java Regex
我的代码:
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次出现。
至于start,end和group的值,它们将是匹配开始,结束和组匹配的位置,所以在你的字符串的第一个0-occurence匹配中,你得到1,1和emtpy字符串。 我不确定这真的能回答你的问题。
迭代几个例子可以清除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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.