1

鉴于此正则表达式:

x[^x]*+x

以及用于匹配的输入字符串:

xbbbx

结果是xbbbx从索引 0 开始到索引 5 结束的匹配文本。

但是,只需更改最后一个字母xZ但是,通过仅将正则表达式和字符串中,我们得到这个正则表达式:

x[^x]*+Z

和这个输入字符串:

xbbbZ

结果是:找不到匹配项

为什么单个字母的变化会导致这种行为变化?

4

1 回答 1

3

您使用“占有”量词的原因将尽可能多地匹配符号。

因此,在这种情况下,xbbbZ正则表达式x[^x]*+匹配所有非 x 字符,直到行尾停止。它已经消耗了 input 内部的“Z” xbbbZ

这个正则表达式 ,x[^x]*+x可以使用,xbbbx因为“占有”量词到达 . 时必须停止x。您的输入x末尾有一个,因此所有格量词停止。这允许正则表达式的最后一部分xx.

在 Java教程页面的末尾,您可以看到所有格量词的另一个示例。

于 2013-06-20T19:25:02.550 回答