2013-03-24 2 views
0

정규 표현식에 문제가 있습니다. HTML 블록을 일치시켜야합니다. 여기Regex - HTML 코드의 여러 줄 블록 일치

예 - 블록 :. HTML의 이러한 블록의

<tr class="tr-list " data-id="XX"> 
    <td class="ip-img"><div class="gun-icon"></div><img src="https://example.com/images/stories/HCP/HCP_5.jpg"/></td> 
    <td class="ip-name ip-sort">Hotel Complex Project</td> 
    <td class="ip-price ip-sort">297.00</td> 
    <td class="ip-earnings ip-sort">43</td> 
    <td class="ip-shares ip-sort">86</td> 
    <td class="ip-status {'sorter':'currency'}"><img 
      src="/img/assets/arrow1.png" title="0.989990234375"/></td> 
    <td class="ip-blank-right"></td> 
</tr> 

모두가 개별적으로 그때 (예를 들어, IP-이름, IP-가격, IP-이익에서 다른 데이터를 추출 할 일치해야합니다.).

그러나 "(=?)"가 나타날 때까지 내 현재의 정규식이 모든 것을 일치 - 부분은 더 이상 사실이 아니다 : 나는 경기로 모든 블록을 가지고 변경해야 할 무엇 http://regexhero.net/tester/?id=2b491d15-ee83-4dc7-8fe9-62e624945dcf

?

인사말! :)

는 PS :

+3

[? 정규식 구문 분석 HTML] (http://stackoverflow.com/a/1732454/1493698) – Antony

+2

를 아치, 어서 ... 진짜? 이 앱은 웹 사이트에서 일부 콘텐츠 만 읽습니다. – reijin

+1

@reijin 왜 - 당신의 정규 표현식이 HTML 구문 분석기를 사용하여 시작하기가 어려울 때도 마찬가지로 쉽고 덜 고통 스럽습니다. –

답변

1

이 모든 TR 행을 얻어야한다 ... 무슨 뜻인지 이해할 수있는 희망 :

<tr class="tr-list[\s\S]+?</tr> 

이것은에 대한 일치하는 그룹과 모든 TR 행을 얻어야한다 열 :

<tr class="tr-list[^<]*?<td class="ip-img">(.*?)</td>\s*<td class="ip-name.*?">(.*?)</td>\s*<td class="ip-price.*?">(.*?)</td>\s*<td class="ip-earnings.*?">(.*?)</td>\s*<td class="ip-shares.*?">(.*?)</td>\s*<td class="ip-status.*?">([\s\S]*?)</td>[\s\S]+?</tr> 
+0

감사합니다, 완벽하게 작동합니다! 적어도 온라인 테스터에서는 ... 파이썬에서 작동하도록 변환해야 할 것 같네요. – reijin

0

중첩 된 HTML은 jQuery를 사용하여 수행 할 수 있습니다 정규 표현식의 일치 에서 중첩 된 배열을 요구하거나 수동으로 정기적 인 표현을 사용하여 트리를 생성합니다 이온

0

자기 동봉하지 않은 전체 HTML 블록 캡처이 정규 표현식 :

var hmtlText="<div bar='baz'>foo</foo>"; 
var pattern = /<([\w]+)(((+)?[\w]+=['"](\w+)?['"])?)+()?(\/)?>((([\t\n\r\s]+)?)+(((.)+)?)+((\10)?)+)+?<\/(\1)>/igm; 
console.log((pattern.test(htmlText) ? 'valid' : 'invalid') + ' html block');