preg_match第二场比赛

时间:2013-01-29 00:09:42

标签: php preg-match

只是尝试preg_match第二场比赛。

<?php
$url = "http://domain.com";
preg_match('~<table([^>]*)(class\\s*=\\s*["\']ladder-table["\'])([^>]*)>(.*?)</table>~i', file_get_contents($url), $match);
print $match[0];    
?>

以下是我要找的表格:

<table class="ladder-table">Content</table>
<table class="ladder-table">Content</table> <-- [This one]
<table class="ladder-table">Content</table>

最后两个表由java脚本代码隐藏。它会影响模式吗?

1 个答案:

答案 0 :(得分:3)

如果您想继续使用正则表达式,请使用preg_match_all

$url = "http://domain.com";
preg_match_all('~<table([^>]*)(class\\s*=\\s*["\']ladder-table["\'])([^>]*)>(.*?)</table>~i', file_get_contents($url), $match);
print_r($match[0][1]);

这可能足以满足您的要求。但是,很难使代码足够强大以处理HTML的更改;例如,如果Content有任何新行,则上述内容不匹配,因为您在没有.*?修饰符的情况下检查PCRE_DOTALL

处理此问题的正确方法是使用适当的HTML解析器,例如DOMothers