递归模式匹配中的命名组



我匹配的LaTeX-Commands的形式命令{…}{…}。第二个参数是可选的。我的RegEx只是perl6 faq中一个示例的稍微修改版本,因为我需要处理在参数中可能嵌套LaTeX命令的情况。

我想使用命名组。我该怎么做呢?我试图将(?:…)与(?&first)一起使用,但它给了我一个"无限递归"错误。在RegExes方面,我可能有点不知所措,但到目前为止,它工作得很好。

my $regex = qr/
          \command
            ({
              (?:
                [^{}]++
                  |
                (?1)
              )*
            })
           ({
              (?:
                [^{}]++
                  |
                (?2)
              )*
           })?
        /x;
$s =~ m/$regex/g

您应该能够使用命名组,如s/(?<first>foo+)/k<first>bar/s/(?first:foo+)/g{first}bar/,但(?<first>:...):视为模式的一部分。

我不确定为什么你的(?PARNO)表达式引起无限递归,但手册有一个额外的父组时做完全相同的事情。

最新更新