2012-12-12 3 views
10

나는 탐욕스럽지 않게 TD 태그를 파싱하려고 시도하고있다.정규식 비 - Greedy

Regex.Split(tempS, @"\<TD[.\s]*?\>"); 

레코드는 다음과 같이 반환 : 왜

"" 
"stuff<TD align="right">More stuff<TD align="right>Other stuff" 
"things" 
"more things" 

없는 내 정규식으로 아래 사용하고

<TD>stuff<TD align="right">More stuff<TD align="right>Other stuff<TD>things<TD>more things 

을 :이 같은 뭔가 시작 해요 그 첫 번째 전체 결과 ("stuff"로 시작하는 것)를 나눕니다. 매개 변수가 있거나없는 TD 태그의 모든 인스턴스에서 정규식을 분할하도록 조정하려면 어떻게해야합니까?

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+1

을'참조하십시오 시도 .' 문자 클래스가 문자 클래스가 아니라 문자 클래스가 아니라. 여러분은'[^>] *'로 더 성공할 수 있습니다. 그러나 그것은 애트리뷰트에서'>'을 깰 것입니다. (html과 xml을 조작하는 정규 표현식보다는 파서를 자주 보는 이유 중 하나이기도합니다.) – Wrikken

+0

@Wrikken 여기 HTML은 꽤 정적입니다. 많은 변형이 없으며 그것을 위해 작동하는 정규식을 알고 있습니다. 그 때문에 나는 파서의 길을 가지 않았다. 그것을 만드는 방법이 있습니까? 문자는 공백을 포함하여 '임의의 문자'를 의미합니까? – steventnorris

답변

13

당신이 원하는 정규식 <TD[^>]*>입니다 :

<  # Match opening tag 
TD # Followed by TD 
[^>]* # Followed by anything not a > (zero or more) 
>  # Closing tag 

참고 : .은 (공백 포함) 모든 항목과 일치 [.] 리터럴 . 그렇게 .*?를 사용하여 일치하는 정도로 [.\s]*? 중복 및 잘못된 것입니다.

+1

기본적으로. 새 줄은 있지만 \ s는 일치하지 않습니다. –

+0

와우, 이건 훌륭해 ... – Hambone

20

비 욕심이 일치하는 경우,이 <TD.*?>

+0

이 작품은 아직까지도 왜 내 머리를 감쌀 수 없나요? – Hambone

+3

@Hambone 양수 기호'*'다음의'?'는 Regex 엔진이 기호를 발견했을 때 먹는 것을 멈추게하기 때문에 '?'다음에 나오는 표현식의 첫 번째 일치, 즉'''. 차이점은 탐욕스럽고 욕심없는'*'때문입니다. – JustAMartin