2011-04-06 2 views
3

이런 종류의 예제를 파싱 할 때 아무 것도 찾을 수 없습니다. 여기 PHP 구문 H tag with style

<h3 style="color:red; font-size:24px;">This contest is still open.</h3> 

내 코드이지만, 내가 페이지에 많은 태그가 있기 때문에이 정확한 H3 태그를 구문 분석하는 것이었다 :(작동하지 않습니다하지만 그들은 style="color:red; font-size:24px;" 그래서 나는 단지 내용을 반환 할 필요가 없습니다

$html = get_file_content('http://www.website.com/contest.php'); 
preg_match('#<h3[^>]*>(.*?)</h3>#i', $html, $match); 
echo $match[1]; 
+2

나는 H 태그를 구문 분석 할 때마다, 나는 스타일로 그것을 할) – karim79

+0

@karim 우수 : 정규식에 대해서는 – alex

+0

, 그것은 가장 가능성이 텍스트 내용에 \ 줄 바꿈으로 인해 실패했습니다. 이 경우'# is' 플래그가 도움이됩니다. – mario

답변

3

DOMDocument을 사용하지 않으시겠습니까? HTML 구문 분석을 위해 설계되었습니다. 정규식은 아니었다.

$dom = new DOMDocument(); 

// Assuming it supports URL, if not, put `file_get_contents()` in there. 
$dom->loadHTMLFile('http://www.website.com/contest.php'); 

foreach($dom->getElemetsByTagName('h3') as $h3) { 
    if ($h3->hasAttribute('style') AND 
     $h3->getAttribute('style') == 'color:red; font-size:24px;' 
    ) { 
     echo $h3->nodeValue; 
     break; 
    } 
} 
+0

이 오류가 발생합니다. "비 객체에서 loadHTML() 멤버 함수 호출"은 사용중인 URL이 html을 지원하지 않는다는 것을 의미합니다. – FAFAFOHI

+0

@FAFAFOHI 'loadHTMLFile()'이어야합니다. DOMDocument가 있는지 확인하십시오. – alex

2

정규 표현식 HTML을 구문 분석하지 마십시오. 진짜 HTML 파서를 사용합니다. 마찬가지로 this one.

또는 many others을.

그들에 style="color:red; font-size:24px;"와 H3에서
0

나는 정규식을 사용해서는 안되는 다른 대답에 동의하지만 이것이 내가 원하는 것에 더 가깝다고 생각한다.

preg_match('#<h3[^>]+?>(.*?)</h3>#i', $html, $match);