如何在regex子例程中访问捕获组?

时间:2016-05-22 04:16:34

标签: regex pcre

我有一个模式,我想在几个地方使用,但我想访问模式的内部部分。有没有办法做到这一点?

在此简化示例中:

(?(DEFINE)
    (?<_isa_> \s+ (?<isa> is \s+ a) \s+ )
)
this (?&_isa_) (?<test>test)

我希望在正则表达式成功时能够访问指定组isa中匹配的捕获字符串,而不必像这样删除周围的\s+

(?(DEFINE)
    (?<_isa_> is \s+ a )
)
this \s+ (?<isa>(?&_isa_)) \s+ (?<test>test)

因为,这基本上意味着每次我想在我的实际正则表达式中执行此操作时,我必须指定一个pre-submatch,submatch和post-submatch,这不是我想要的。

1 个答案:

答案 0 :(得分:1)

这是不可能的,因为ListView块内的捕获组仅在该块内“可见”,并且无法从该模式访问。

请参阅此perlre reference

  

这允许定义仅由递归机制执行的子模式... 请注意,递归返回后无法访问在递归内匹配的捕获组,因此捕获组的额外层是必要的   ...   最后,请记住,在DEFINE块内创建的子模式会计入绝对和相对捕获数量。

因此,即使您有3个已命名的捕获组,也只能访问主模式中定义的DEFINE组。