3

只是想参加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 脚本代码隐藏。对图案有影响吗?

4

1 回答 1

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 解析器,例如DOM其他

于 2013-01-29T00:16:44.953 回答