2011-04-06 35 views
3

我找不到任何解析这种例子。php解析h标签样式

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

这里是我的代码,但它不工作:(我是因为有在页面上的许多标签来解析这个确切H3标签,但他们没有style="color:red; font-size:24px;"所以我只想要回内容从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 2011-04-06 01:10:55

+0

@karim优秀:) – alex 2011-04-06 01:11:33

+0

至于正则表达式,它最有可能的文本内容失败,原因是\换行。在这种情况下'#is'标志会有所帮助。 – mario 2011-04-06 01:29:04

回答

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()”是否意味着我使用的网址不支持HTML – FAFAFOHI 2011-04-06 01:17:41

+0

@FAFAFOHI我塞满了,应该是'loadHTMLFile()'。确保你有DOMDocument。 – alex 2011-04-06 01:18:17

0

我同意其他的答案,你不应该使用正则表达式,但因为你是我认为这是更接近你想要什么。

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