2011-11-25 4 views
1

LaTeX-Command의 \ command {...} {...} 형식과 일치합니다. 두 번째 인수는 선택 사항입니다. 내 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에 정확히 같은 일을 할 때 추가 괄호 그룹이 있습니다.