我有一个模式,我想在几个地方使用,但我想访问模式的内部部分。有没有办法做到这一点?
在此简化示例中:
(?(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,这不是我想要的。
答案 0 :(得分:1)
这是不可能的,因为ListView
块内的捕获组仅在该块内“可见”,并且无法从该模式访问。
请参阅此perlre
reference:
这允许定义仅由递归机制执行的子模式... 请注意,递归返回后无法访问在递归内匹配的捕获组,因此捕获组的额外层是必要的。 ... 最后,请记住,在
DEFINE
块内创建的子模式会计入绝对和相对捕获数量。
因此,即使您有3个已命名的捕获组,也只能访问主模式中定义的DEFINE
组。