【发布时间】:2016-05-22 04:16:34
【问题描述】:
我有一个想在几个地方使用的模式,但我想访问该模式的内部部分。有没有办法做到这一点?
在这个简化的例子中:
(?(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)
因为,这基本上意味着每次我想在我的实际正则表达式中执行此操作时,我都必须指定预子匹配、子匹配和后子匹配,这不是我想要的。
【问题讨论】:
-
不可能,DEFINE 块内的捕获组仅在该块内“可见”,无法从模式访问。
-
如果您的工具/语言暴露了这种情况,您可能可以使用标注机制破解某些东西,但您也会从失败的分支中获得结果。