2014-11-17 5 views
0

테이블 중 <td><tr>을 추출하고자하는 중첩 된 html 테이블 태그가 포함 된 html 페이지에서 테이블을 추출하고 싶습니다.PHP 함수를 사용하는 정규 표현식 html 테이블 추출문 preg_match_all

저는 이것을 사용하고 있습니다. <b></b>

$file = file_get_contents($url); 
preg_match_all ("/<b>(.*)<\/b>/U", $file, $pat_array); 
print $pat_array[0][0]." <br> ".$pat_array[0][1]."\n"; 

에 대한 작업 벌금 아무도 나에게 <tr><td> </table>를 사용하여 중첩 된 <table (some table properties)> 일부 데이터에 대한 정규 표현식을 알 수 있습니다. <tr> 또는 <td> 필드에 href가있는 경우이를 유지하고 필요한 테이블을 염두에 두십시오.

예 :

$file = "<html> <head> <title> asdf </title> </head> <body bgcolor = red > <table border = 1> <table bgcolor = white> (some tr and td data > </table> </table></body> </body> </html>" 

preg_match_all ("regular expression for table tag", $file, $pat_array); 
print $pat_array[0][0]." <br> ".$pat_array[0][1]."\n"; 

업데이트 1 :

내가 코드를 아래에 시도 때 오류 보여줍니다

Notice: Undefined offset: 0 in C:\xampp\htdocs\testphp\tabledata.php on line 27

코드 :

$file = file_get_contents($url); 
$pat_array = Array(); 
preg_match_all ("/<tr>(.*)<\/tr>/U", $file, $pat_array); 
print $pat_array[1][0]; 

아무도 나를 도울 수를 이 오류에 관해서도?

+0

예제가 더 좋을 것입니다. –

+0

정말 정규 표현식을 사용해서는 안되지만 HTML에''과''사이의 줄 바꿈이 있다고 생각합니다. '/ s' (DOTALL) 한정자를 사용하면 도움이됩니다. –

+0

[HTML의 정규식 표 행 일치] (https://stackoverflow.com/questions/7289181/regex-matching-table-rows-in-html)의 가능한 중복 –

답변

1

HTML을 정규식으로 구문 분석하지 마십시오. 대신 DOMDocumentDOMXpath을 사용하십시오.

$dom = new DOMDocument(); 
$dom->loadHtml($file); 

$xpath = new DOMXpath($dom); 
$tableNodes = $xpath->query('//table'); // select all table nodes 

// do something, e.g. print node content 
foreach ($tableNodes as $tableNode) { 
    print $tableNode->nodeValue; 
} 

xpath, have a look here과 함께 수행 할 수있는 더 많은 쿼리 옵션이 있습니다. 또한 단순히 노드를 사용하여 내용을 인쇄하는 것 외에 다른 작업을 수행하려고합니다. 각 테이블의 하위 DOM을 찾으려면 다음을 시도하십시오.

foreach ($tableNodes as $tableNode) { 
    $newDom = new DOMDocument(); 
    $clone = $tableNode->cloneNode(true); 
    $clone = $newDom->importNode($clone, true); 
    $newDom->appendChild($clone); 

    $html = $newDom->saveHTML(); 
} 
+0

이 코드를 사용하는 방법, 다른 코드를 설치하는 방법 파일 또는 기본적으로 이러한 기능은 PHP에, 여분의 패키지를 설치해야하는 경우 설치하는 방법과 공유 된 호스팅 및 iis 7 서버를 사용하므로 적절한 해결책을 알려줍니다. – santosh

+0

코드가 너무 많은 오류에 걸쳐 작동하지 않습니다. – santosh

+0

@santosh 어떤 오류가 발생합니까? 접근 방식은 정확합니다. 아마도'$ dom-> loadHtml (...) '에 오류가 발생할 수있는 무효 HTML을 가지고있을 것입니다. – SBH