2011-04-21 7 views
0
나는 다음 (미디어 위키의 문법과 유사) 같은 텍스트를 대체 파서 만들고 싶습니다

:템플릿 생성 파서

some text {{template|parameter1|parameter2}} some text 

이 정규식 템플릿 이름 그룹에 중괄호 사이의 텍스트 (분할 일치해야합니다을 및 매개 변수). 이것은 내가 이미 가지고있는 것이다. 텍스트는 바깥 쪽 템플릿에 가장 안쪽에서 교체해야합니다

some text {{template|{{subtemplate|st-parameter}}|parameter2}} some text 

: 나는 더하지 않는

은 무한히 중첩 된 템플릿입니다. 위의 예제에서 첫 번째 닫는 중괄호에서 중단되지 않는 정규식을 작성하는 방법을 잘 모르겠습니다. 정규식이 안쪽 템플릿에만 일치하는 경우 ({{}} 안 함) 가장 좋습니다. 어디서 시작하나요?

+1

어떤 정규식의 맛을 찾고 계십니까? –

+0

PCRE는 PCRE입니다. 그러나 다른 정규 표현식에서 훨씬 쉽게 사용하면 답을 고맙게 생각합니다. – wiki138

+0

많은 언어가 PCRE의 일부 형식을 지원하지만 구현간에 여전히 작은 차이가 있습니다. 사용하는 언어 (또는 사용하려고하는 언어)를 말하는 것이 가장 좋습니다. –

답변

0

당신은 텍스트가 중괄호가 포함되어 있지 않을 수 있습니다 의미합니다 (그러나 중괄호)이 만 안쪽의 일을 일치시킬 :

\{([^{}]*)\} 

당신의 결과는 정규 그룹에있을 것입니다 1.

+0

텍스트는 중괄호를 포함 할 수 있지만 유효한 다른 템플릿 (예 :'{{template | aa {{bb}}')을 포함 할 수 없으므로'{{template | aa {{}} | bb} template | aa {{subtemplate}} | bb}}'허용되어야합니다.)하지만 좋은 시작, 감사합니다. – wiki138

+0

무언가를 유효한 템플릿으로 만드는 것은 무엇입니까? –

2

그것을 당신이 the limitations of regular languages에 맞선 것처럼 보입니다. 완전 중 재귀 적 삽입과 같은 일을하는 경우 Ingo가 중괄호를 사용하지 않는 것과 같은 중첩 수준이 어디에 있는지 쉽게 알 수있는 트릭을 사용하지 않고 컨텍스트가없는 문법을 사용하려고합니다.

관련 문제