Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在正则表达式中,尝试无限数量的零长度匹配是否合理?_Regex - Fatal编程技术网

Regex 在正则表达式中,尝试无限数量的零长度匹配是否合理?

Regex 在正则表达式中,尝试无限数量的零长度匹配是否合理?,regex,Regex,我正在实现一个正则表达式引擎,遇到了一个有趣的问题;如果试图将表达式/(?>a)*/与“a”进行匹配,则理论上索引0处有无穷多个正零宽度前瞻匹配 我的问题是:匹配量化的零宽度匹配是否合理?我是应该让这种情况无限期地发展下去,并责怪写这种表达的人,还是应该抓住并否认这种匹配 编辑:或者只是一个匹配,而忽略它要求更多的事实 编辑2:目前,我的引擎看到零宽度匹配,将其添加到结果中(零个字符),保留在相同的索引中,最后尽可能多次返回到相同的零宽度表达式(与*、+、{n、}等一起使用时,该表达式是无限的)

我正在实现一个正则表达式引擎,遇到了一个有趣的问题;如果试图将表达式
/(?>a)*/
“a”
进行匹配,则理论上索引0处有无穷多个正零宽度前瞻匹配

我的问题是:匹配量化的零宽度匹配是否合理?我是应该让这种情况无限期地发展下去,并责怪写这种表达的人,还是应该抓住并否认这种匹配

编辑:或者只是一个匹配,而忽略它要求更多的事实


编辑2:目前,我的引擎看到零宽度匹配,将其添加到结果中(零个字符),保留在相同的索引中,最后尽可能多次返回到相同的零宽度表达式(与*、+、{n、}等一起使用时,该表达式是无限的)。

一致认为没有,允许多个零宽度匹配是不合理的。

我认为只有一个匹配。另请参见(具体)和(一般)。这两种方法都没有专门针对量化环视。我已经非常熟悉它们的使用,而“前瞻”只是一个例子。还有其他可能的零宽度匹配,例如,对空表达式或问号进行or或ing。我认为您不应该允许可量化的lookarounds-一个或没有。IIRC PERL正则表达式也不允许这样做。然而,如果你必须实现它们,你可以在内部丢弃它们,如果量词允许0次,否则检查它们一次。复制现有系统似乎是最好的方法。我无法让任何其他系统无限匹配零宽度。