【问题标题】:Named groups in recursive pattern Match递归模式匹配中的命名组
【发布时间】:2012-01-06 01:06:21
【问题描述】:

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

我想使用命名组。我怎样才能做到这一点?我尝试将 (?:...) 与 (?&first) 一起使用,但它给了我一个“无限递归”错误。就 RegExes 而言,我可能有点过头了,但到目前为止效果很好。

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

$s =~ m/$regex/g

【问题讨论】:

  • 或许你能找到有用的东西here

标签: regex perl recursive-regex


【解决方案1】:

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

我不确定为什么您的 (?PARNO) 表达式会导致无限递归,但 manual 在执行完全相同的操作时有一个额外的括号组。

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 2011-03-03
    • 2017-01-26
    • 2020-12-28
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多