为什么在正则表达式中需要 (?(R)...|...) if 条件?

Adr*_*ian 6 regex perl pcre

我正在查看一些正则表达式文档,并对某些内容感到困惑。(R)上下文中的条件据说(?(R)...|...)是:

Perl有点神秘:

(右)

    检查表达式是否已在递归内部求值。完整语法:(?(R)then|else)

PCRE没有多大用处:

(?(R) 整体递归条件

regular-expressions.info对此没有什么可说的。

这个条件是说子程序堆栈的深度是否超过 1 层还是有其他含义?

Wik*_*żew 1

请参阅此解释

如果没有名为“R”的子模式,则如果已对整个模式或任何子模式进行递归调用,则条件为 true

这意味着(?(R)条件检查整个模式是否至少递归一次,并且检查的结果是布尔值,如果发生递归则为True ,否则为False

如果您需要检查一些示例,请参阅https://github.com/PhilipHazel/pcre2/blob/587b94277b50ababde2380b5877c93e36ca65db8/src/pcre2_jit_test.c