2009-10-01 4 views
1

테이블 셀에서 식별 가능한 텍스트로 중첩 테이블을 일치시키는 정규식은 무엇입니까? 나는 시도했으나 예제에서 두 테이블의 시작과 끝을 잡아 내고 싶은 특정 테이블을 추출하는 정규 표현식을 찾지 못했습니다. 여기에 뭔가를 시작하는 것입니다 : "<table>.*?</table>는" 어떤 정규식이 중첩 테이블을 테이블 셀의 식별 가능한 텍스트와 비교합니까?

<table> 
    <tr> 
     <td> 
      <table> 
       <tr><td>Code1</td></tr> 
       <tr><td>some data</td></tr> 
       <tr><td>etc ...</td></tr> 
      </table> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <table> 
       <tr><td>Code2</td></tr> 
       <tr><td>some data</td></tr> 
       <tr><td>etc ...</td></tr> 
      </table> 
     </td> 
    </tr> 
</table> 

내가 "CODE2"를 포함하는 테이블을 추출 할 말. 어떤 정규 표현식이 구체적으로 일치 할 것인가?

+6

HTML 파서/DOM을 대신 사용해보십시오. HTML을 정규식으로 파싱하는 것은 일반적으로 모범 사례로 간주되지 않습니다. PHP, .NET 등에 사용할 수있는 파서가 있습니다 (어떤 언어를 사용하고 있는지 확실하지 않습니다). – TrueWill

+0

[XML과 HTML을 정규식으로 구문 분석하기 어려운 이유에 대한 몇 가지 예를 제공 할 수 있습니까?] (http://stackoverflow.com/questions/701166/can-you-provide-some-examples-of- XHTML 독립 태그를 제외하고 [RegEx 일치하는 공개 태그] 중복 가능 –

+0

중복 가능성이있는 이유는 무엇입니까? (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –

답변

4

다음 정규식 테이블을 찾을 수 있습니다. 그렇다면 일치 표 내의 두 번째 시작이 없는지 확인하기 위해 부정적인 미리보기 (?!)가 있습니다.

1

정규식을 사용하지 마십시오. HTML 파서를 사용하십시오! HTML 일반 아니므로

$xml =~ /<table>.*<td>Code2<\/td>.*<\/table>/s; 
+5

XML 파서를 사용하지 말고 ** HTML ** 파서를 사용하십시오! –

+0

(물론 내용이 유효한 XHTML인지 확신 할 수없는 경우) –

+0

감사합니다. 답변을 편집했습니다. – tster

5

나는이에 정규 표현식을 사용하지 것이고, 가장자리의 끝이 없습니다 :

그러나, Perl로 (당신이 중첩 된 테이블이없는 가정) 너를 끌어들이는 사건들. HTML 파서를 사용하는 것이 좋습니다. 어느 언어 나 플랫폼을 사용하든 사용할 수있는 언어 나 플랫폼이 있습니다. (s) "점도 줄 바꿈과 일치"(?ms)

(?ms)<table>((?!<table>).)*<td>Code2</td>.*?</table> 

당신은 "여러 일치"를 켜 (m)과 :

관련 문제