Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_Pcre - Fatal编程技术网

Regex 正则表达式中与零宽度无关的子表达式是什么?

Regex 正则表达式中与零宽度无关的子表达式是什么?,regex,pcre,Regex,Pcre,所以我在寻找一份完整的PCRE的备忘单(仍然没有找到,如果你能给我看的话,我还没有找到一份包含\K和\G的备忘单),我偶然发现了 现在我熟悉了lookaround断言,比如(?或(?=otherstuff),但我没有遇到这个构造(从链接到文章): (?>…)零宽度独立[sic]子表达式 有人能解释一下它的作用,以及什么时候有用吗 另外,您可以向我指出包含PCRE中所有特殊符号的文档吗?甚至不包括它们在正则表达式中的所有功能: [1] pry(main)> /hello\Kworld/.ma

所以我在寻找一份完整的PCRE的备忘单(仍然没有找到,如果你能给我看的话,我还没有找到一份包含\K和\G的备忘单),我偶然发现了

现在我熟悉了lookaround断言,比如
(?或
(?=otherstuff)
,但我没有遇到这个构造(从链接到文章):

(?>…)零宽度独立[sic]子表达式

有人能解释一下它的作用,以及什么时候有用吗

另外,您可以向我指出包含PCRE中所有特殊符号的文档吗?甚至不包括它们在正则表达式中的所有功能:

[1] pry(main)> /hello\Kworld/.match("helloworld")
=> #<MatchData "world">
[1]pry(main)>/hello\Kworld/.match(“helloworld”)
=> #
这个
(?>…)
是一个原子群:

原子组是当正则表达式引擎退出时自动退出的组 丢弃组内任何标记记住的所有回溯位置。 原子群是不可捕获的

--

而且,正如蒂姆指出的,原子群不是零宽度的


所有PCRE构造的真实列表:

不确定您为什么说它没有文档记录。请参阅:

分组可以通过(
?>pat
)进行原子化。这会导致 子表达式pat将独立于其他子表达式进行匹配 表达式,使其匹配的内容对于余数是固定的 除非必须放弃整个子表达式并 这样,pat就被视为不可分割的 原子分组通常用于优化模式,以便 防止正则表达式引擎不必要地回溯

下面模式中的
与字符串的第一个字符匹配, 然后,
*
匹配
Quote“
。这会导致整体匹配失败,因此 通过
*
匹配的文本被一个位置回溯,这将使 可匹配的字符串的最后一个字符


…而且它根本不是零宽度,所以链接到的页面@MikeH-R是不正确的。@Tim Good catch,没有注意到。将包括它。@TimPietzcker ahhh…这解释了为什么我在谷歌上找不到答案。感谢大家整理这个问题。感谢链接到pcre.txt,我在那个网站上,不知道我怎么错过了它,一定是o没有哪一天!没问题@Mike。请注意,大多数现代编程语言的正则表达式库经常说它们是PCRE或PCRE兼容的,很少有库支持
PCRE.txt
链接中列出的所有构造(可能只有Perl支持?)@BartKiers-hmm…这很有趣,构建一系列测试来了解所有perl兼容正则表达式的perl兼容性是多么有趣,我相信它实际上可以非常容易地构建,您只需要一系列正则表达式,所有正则表达式都测试一个不同的构造,然后对于每种语言,您只需要正则表达式语法就可以自动生成吃得很简单。说得好,我忘了检查ruby文档中的构造,我在寻找
\K
,它们(如果我错了,请纠正我)没有记录在文档中。@MikeH-R我通常通过说
perldoc perlre
来引用PCRE语法。谢谢,从现在开始,我也应该这样做。:)
/".*"/.match('"Quote"')     #=> #<MatchData "\"Quote\"">
/"(?>.*)"/.match('"Quote"') #=> nil