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 我知道的 : >“一个?”代表字符’a’的零或一次出现. Java API说: > matcher.start()返回上一个匹配的起始索引. 我想知道的是什么: >在哪些情况下正则表达式引擎遇到零 解决方法
的?是一个贪婪的量词,因此它会在尝试0次出现之前首先尝试匹配1次出现.在你的字符串中,
>它从第一个字符’a’开始,并尝试再次匹配1次出现. ‘a’字符匹配,因此它返回您看到的第一个结果 它比这复杂一点,但这是主要的想法.当1次出现不匹配时,它将尝试0次出现. 至于start,end和group的值,它们将是匹配开始,结束和组匹配的位置,所以在你的字符串的第一个0-occurence匹配中,你得到1,1和emtpy字符串.我不确定这真的能回答你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |