我知道?
是一个贪婪的量词,??
是不情愿的。
当我按如下方式使用时,它总是给我一个空输出?是因为它总是从左到右(首先看零发生然后匹配的发生)或另一个发生?
Pattern pattern = Pattern.compile("a??");
Matcher matcher = pattern.matcher("aba");
while(matcher.find()){
System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
}
输出:
0[]0
1[]1
2[]2
3[]3
答案 0 :(得分:3)
我不确定Java实现,但regular-expressions.info为??
说明了这一点:
使前面的项目可选。懒惰,所以可选项目在匹配中被排除在可能的情况下。由于其用途有限,此构造通常被排除在文档之外。
因此,你得到4个匹配(3个字符位置+在ent处的空字符串),并且从每个匹配中排除可选的a
。
答案 1 :(得分:3)
您的正则表达式可以解释如下:“尝试匹配零个字符,如果失败,请尝试匹配一个'a'字符。”
尝试匹配零个字符将始终成功,因此对于仅包含单个不情愿元素的正则表达式实际上没有任何意义。