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