在某些情况下,量词{0}是否有意义?

ste*_*ema 11 regex

例:

/(?:美孚){0}酒吧/

我在另一个答案中看到了类似的东西.起初我想"应该是什么",然后,"好的可能有意义,背后有一种负面的看法",所以Foo以前不允许bar,但这不起作用.

你可以在Regexr上看到这个:它只匹配,bar但它也与barin 匹配Foobar.
当我为行的开头添加锚点时:

/^(?:Foo){0}bar/
Run Code Online (Sandbox Code Playgroud)

它表现得像我期待的那样.它只是相匹配bar,而不是barFoobar.

但这与我只使用/bar/或使用的行为完全相同/^bar/.

量词{0}只是一种无用的副作用,还是真的有用的行为呢?

Kob*_*obi 11

很好的用途{0}.它允许您定义目前不打算捕获的组.在某些情况下,这可能很有用:

  • 最好的一个 - 在递归正则表达式(或其他奇怪的结构)中使用该组.例如,Perl具有(?(DEFINE) )相同的用途.
    一个简单的例子 - 在PHP中,这将匹配barFoo(工作示例):

    preg_match("/(?:(Foo)){0}bar(?1)/", "barFoo", $matches);
    
    Run Code Online (Sandbox Code Playgroud)
  • 将失败的捕获组(命名或编号)添加到结果匹配.

  • 在模式被重构的情况下保持所有组的索引完整.

正如彼得所建议的那样,不太好用的用途是:

  • 生成的模式.
  • 可读性-具有一定的重复,在图形{0}{1}可能导致在正确的方向思考.(好吧,不是最好的一点)

这些都是罕见的情况,在大多数模式中都是错误的.