鉴于此正则表达式:
x[^x]*+x
和用于匹配的输入字符串:
xbbbx
结果是匹配的文本xbbbx
从索引0开始到索引5结束。
但是,通过仅在正则表达式和字符串中将最后一个字母x
更改为Z
,我们得到此正则表达式:
x[^x]*+Z
和这个输入字符串:
xbbbZ
,结果是:找不到匹配项。
为什么单个字母的更改会导致行为发生这种变化?
答案 0 :(得分:3)
你之所以使用“占有”量词,它会尽可能地匹配符号。
因此,在这种情况下xbbbZ
,正则表达式x[^x]*+
匹配所有非x字符,直到行的末尾停止。它已经消耗了输入xbbbZ
内的“Z”。
此正则表达式x[^x]*+x
与xbbbx
一起使用,因为“占有”量词 在达到x
时停止。您的输入最后有x
,因此占有量词停止。这允许正则表达式x
的最后一部分与x
匹配。
在Java tutorial page的末尾,你可以看到另一个占有量词的例子。