我在\ command {...} {...}形式的LaTeX-Commands上匹配。第二个参数是可选的。我的RegEx只是perl6 faq中一个示例的略微修改版本,因为我需要注意参数中可能存在嵌套LaTeX命令的情况。
我想使用命名组。我怎样才能做到这一点?我尝试使用(?< first>:...)和(?& first),但它给了我一个“无限递归”错误。对于这里的RegExes,我可能有点过头了,但到目前为止这种方法效果非常好。
my $regex = qr/
\\command
(\{
(?:
[^\{\}]++
|
(?1)
)*
\})
(\{
(?:
[^\{\}]++
|
(?2)
)*
\})?
/x;
$s =~ m/$regex/g
答案 0 :(得分:0)
您应该可以使用s/(?<first>foo+)/\k<first>bar/
或s/(?first:foo+)/\g{first}bar/
等命名群组,但(?<first>:...)
会将:
视为模式的一部分。
我不确定为什么你的(?PARNO)
表达式会导致无限递归,但manual在执行完全相同的事情时会有一个额外的paren组。