2010-02-11 7 views
3

계층 적 데이터와 일치하는 단일 정규 표현식을 만들 수 있습니까? 예를 들어계층 적 정규 표현식

:

<h1>Action</h1> 
    <h2>Title1</h2><div>data1</div> 
    <h2>Title2</h2><div>data2</div> 
<h1>Adventure</h1> 
    <h2>Title3</h2><div>data3</div> 

내가 일치와 끝까지 싶습니다.

"Action", "Title1", "data1" 
"Action", "Title2", "data2" 
"Adventure", "Title3", "data3" 

내가보기로이 여기 놀이에 계층 구조가 있다는 것을 알고 나는 H1을 캡처하는 패턴을 코드 경우에만 해당 계층의 첫 번째 항목과 일치 필요합니다. H1 코드를 작성하지 않으면 캡처 할 수 없습니다. 내가 이것을 해결하기 위해 고용 한 특별한 트릭이 있는지 궁금해하고 있었다.

이것은 .NET 프로젝트입니다.

+0

어떤 언어로 제공됩니까? 정규 표현식은 언어가 아닙니다. 그것에는 많은 다른 방언이 있습니다. 어떤 방언은 여러분이 원하는 것을 지원하고, 어떤 방언은 원하지 않는 방언을 지원합니다. 대부분은 그렇지 않습니다. –

+1

정규식을 사용하는 것은 좋지 않지만 HTML 구문 분석기를 사용하는 것이 좋습니다. 플랫폼에 따라 좋은 것을 제안 할 수 있습니다. 질문을 수정하고 다시 태그하십시오. –

+1

경험상 정규 표현식은 야생에서 HTML을 처리하는 데 매우 효과적 일 수 있습니다. D는 우아하지 않지만 시간이 지나면 효과적입니다. –

답변

5

해결 방법은 정규식을 사용하지 않는 것입니다. 그들은 이런 종류의 일에 충분히 강력하지 못합니다.

파서가인데, HTML과 일치시키려는 것처럼 보이기 때문에 선택해야 할 것이 많습니다.

+1

@snives yeh는 언어에 따라 다릅니다 - antlr/lex-yacc/spirit이 트릭을 수행합니다.이 코멘트를 입력하면 Google에 올릴 수 있습니다. –

+0

동의, 좋은 간결 대답. –

+0

흥미 롭다. 나는 이것들을 점검 할 것이다. 고마워. – Snives

0

정규식이이 유형의 데이터에는 작동하지 않습니다. 그것은 규칙적인 것이 아닙니다.

이 경우 XML 구문 분석기를 사용해야합니다.

2

HTML/XML을 RegEx로 구문 분석하려고하면 일반적으로 계층 적이므로 나쁜 연습이 고려됩니다. 재귀 함수를 사용하면됩니다. 그러나이 경우 더 나은 해결책은 실제 XML 파서를 사용하는 것입니다. 나는 당신이 사용하는 플랫폼을 모른 채로 그보다 더 나은 조언을 줄 수는 없습니다.

EDIT : Regex도 매우 느려서 HTML 처리에 좋지 않은 또 다른 이유입니다. 그러나 XML/DOM 프로세서가 훨씬 더 많은 메모리를 사용하기 때문에 더 빠를 가능성이 높다.

간단한 문서의 데이터를 보여주고 싶거나 직접 솔루션을 작성하려는 경우에는 그다지 어렵지 않습니다. 태그를 찾아 내용을 다음 재귀 수준으로 전달하는 단순한 재귀적인 상태 기반 스트림 프로세서를 작성하십시오. 예를 들어

:

- In a recursive function, seek out a "<" character. 
- Now find a ">" character. 
- Preserve everything you find until the next "<" character. 
- Find a ">" character. 
- Pass whatever you found between those tags into the recursive function. 

당신은 자신을 확인 오류를 해결해야 할 것이다, 그러나 찾을 수있는 다른 아무것도 단지 때 기본 케이스 (다시 이전 수준까지 반환)입니다.

아마도 도움이 될지도 모르겠다. 행운을 빈다.