您如何解释空正则表达式和空捕获组正则表达式返回字符串长度加一结果?
Code
public static void main(String... args) {
{
System.out.format("Pattern - empty string\n");
String input = "abc";
Pattern pattern = Pattern.compile("");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String s = matcher.group();
System.out.format("[%s]: %d / %d\n", s, matcher.start(),
matcher.end());
}
}
{
System.out.format("Pattern - empty capturing group\n");
String input = "abc";
Pattern pattern = Pattern.compile("()");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String s = matcher.group();
System.out.format("[%s]: %d / %d\n", s, matcher.start(),
matcher.end());
}
}
}
Output
Pattern - empty string
[]: 0 / 0
[]: 1 / 1
[]: 2 / 2
[]: 3 / 3
Pattern - empty capturing group
[]: 0 / 0
[]: 1 / 1
[]: 2 / 2
[]: 3 / 3
正则表达式引擎被硬编码为在零长度匹配时前进一个位置(否则无限循环)。您的正则表达式匹配零长度子字符串。每个字符之间都有零长度的子字符串(想想“每个字符之间的间隙”);此外,正则表达式引擎还会考虑字符串的开头和结尾有效匹配位置。因为字符串的长度N
包含N+1
字母之间的间隙(计算正则表达式引擎所做的开始和结束),你会得到N+1
火柴。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)