2012-10-31 2 views
0

도와주세요! 다음 텍스트를 트리로 구문 분석하기위한 코드/정규 표현식을 작성해야합니다.C + +에서 정규 표현식의 텍스트 트리를 파싱

some text I want to ignore==toplevel== 
some text, with newlines maybe 

===nextlevel=== 
more text. This is a child node of 'toplevel' 

===anotherchild=== 
this is a sibling of 'nextlevel' and a child of 'toplevel'====leaf==== 
this is a child of 'anotherchild' 
====leaf2==== 
sibling of 'leaf' & child of 'anotherchild' 

===child3=== 
this is a sibling of 'anotherchild' and 'nextlevel' and a child of 'toplevel' 

등이 있습니다.

하위 레벨이 최상위 레벨과 일치하지 않도록 할 수 없습니다. 나는 = {2}을 시도했지만 ===와 ====는 여전히 일치합니다. '== toplevel =='다음의 모든 텍스트를 추출한 일치 항목을 가져 오는 것은 시작일 것입니다. 줄 바꿈을 무시하거나 먹을 수는없는 것 같습니다.

많은 도움을 주셨습니다. Charlie.

+0

어떻게 결과를 저장할 계획입니까? – sehe

+0

어떤 종류의 구조체 트리에서 아직 확실하지 않은 이유는 무엇입니까? –

+0

글쎄, 당신은 구체적인 답을 기대할 수 없기 때문에. 그렇다고해서 구체적인 질문이 없습니다. 여기에 당신을위한 일반적인 정규 표현식'(== +). *? \ 1 \ n'은 - 역 참조를 지원하는 regex 엔진에서 작동합니다 (어느 것이 든 언급하지 않습니다). – sehe

답변

0

다음 정규식의 첫 줄이 "^ == [^ =]"와 일치합니다. 즉, 등호 2 개로 시작하는 행과 등호가 아닌 행이 있습니다. 다른 레벨에 대해 유사한 패턴을 사용할 수 있습니다.

줄 바꿈/처리는 실제로 텍스트를 읽는 방법에 따라 다릅니다. 가능한 경우 정규 표현식과 일치 시키려하지 않고 입력 루틴에서 개행을 처리합니다.

+0

미안하지만, 완전히 지정하지 않았습니다. 문제는 노드 태그가 줄 시작에 묶여 있지 않고 그 뒤에 줄에 물건이있을 수 있다는 것입니다. 이 질문을 더 명확하게 편집 할 것입니다. –

+0

아하! 사실, 노드 태그는 항상 CRLF로 끝나기 때문에 많은 도움이됩니다. 다시 편집 됨 ... –

+0

= {2,5} ((\ w | \ s) +) = + \ r \ n 태그를 가져 오면 수동으로 텍스트를 구문 분석 할 것입니다. 감사! –

0

=+(name)=+ 문자열을 모두 일치시키고 은 코드에 = 수를 셉니다.