理解占有量词,java正则表达式

我理解一个正面的正则表达式会到达文本的末尾,并且不会回溯以查看在结束之前是否存在匹配。 如果最后有一个匹配则返回true,否则它会立即返回false。 我踩过这个:

Pattern patt = Pattern.compile(".*+foo"); Matcher matcher = patt.matcher("xxfooxxxxxfooxxxfoo"); while (matcher.find()) System.out.println(matcher.group()); 

即使最后有一场比赛,它也没有给我任何帮助。 有什么想法吗?

另外我理解为了使正则表达式懒惰/占有欲我在第一个量词之后添加?/ +(即*?或* +)。 是对的吗? 谢谢!

即使最后有一场比赛,它也没有给我任何帮助。 有什么想法吗?

.*+将匹配整个输入字符串(包括最后一个foo )。 并且因为它不会从字符串的末尾回溯,所以正则表达式.*+foo不匹配。

另外我理解为了使正则表达式懒惰/占有欲我在第一个量词之后添加?/ +(即*?或* +)。 是对的吗?

占有欲的反面部分并不是懒惰的。 这将是贪婪的,默认情况下是*

因此,正则表达式.*?foo将匹配"xxfoo" ,而正则表达式.*foo将匹配"xxfooxxxxxfooxxxfoo"

占有量词不会放弃回溯的匹配。 .*+匹配你的整个字符串然后foo没有匹配。

呃,像巴特说的那样。 🙂

只有当你知道你匹配的东西永远不会被回溯时才使用占有量词(例如, [^f]*+.*foo或者,如果你知道唯一的“f”字符将在“foo”的开头, [^f]*+foo )。