再帰的パターンの名前付きグループMatch

私は\ command {...} {...}形式のLaTeXコマンドにマッチしています。 2番目の引数はオプションです。私のRegExは、 perl6 faq これは引数の中にネストされたLaTeXコマンドがあるかもしれないというケースを扱う必要があるからです。

I want to use named groups. How can I do this? I tried to use (?:...) together with (?&first), but it gives me an "infinite recursion" error. I might be a little over my head in terms of RegExes here, but this worked very nicely so far.

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

$s =~ m/$regex/g
1
おそらく、ここに役立つものを見つけることができます。
追加された 著者 TLP,

1 答え

You should be able to use named groups like s/(?foo+)/\kbar/ or s/(?first:foo+)/\g{first}bar/ but (?:...) treats the : as part of the pattern.

なぜあなたの(?PARNO)式が無限再帰を引き起こしているのか不明ですが、マニュアルには、まったく同じことをするときに追加のparenグループがあります。

0
追加された