2011-11-25 18 views
1

我在形式\ command {...} {...}的LaTeX命令上匹配。第二個參數是可選的。我的RegEx是perl6 faq中的一個示例的稍微修改版本,因爲我需要注意參數內部可能存在嵌套的LaTeX命令的情況。我想使用命名組。我怎樣才能做到這一點?我試圖使用(?<第一個>:...)和(?&第一個),但它給了我一個「無限遞歸」錯誤。在RegExes這方面,我可能會略微超過我的頭,但是迄今爲止這非常好。遞歸模式中的命名組匹配

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

$s =~ m/$regex/g 
+0

也許你可以找到一些有用的[這裏](http://search.cpan.org/search?q=latex) – TLP

回答

0

您應該能夠使用像s/(?<first>foo+)/\k<first>bar/s/(?first:foo+)/\g{first}bar/(?<first>:...)對待:命名組作爲模式的一部分。

我不確定爲什麼您的(?PARNO)表達式導致無限遞歸,但manual在做完全相同的事情時有一個額外的paren組。