网站www.example.com里面有很多列表。也就是说,
<ol>
<li>This is a list saying about asp</li>
<li>This is a list saying about javascript</li>
<li>This is a list saying about php</li>
<li>This is a list saying about .net</li>
</ol>
我需要使用php获取带有“ php ”字样的列表 那就是输出应该是“这是一个关于php的列表”
如何使用preg_match ???
执行此操作我使用CURL类来获取HTML内容。 这是我使用的代码
$site = $curl->get("http://www.example.com/outputs.html");
$pattern = 'I NEED TO GET THIS PATTERN';
preg_match($pattern, $site, $matches);
$php_out = $matches[1];
echo $php_out;
当我使用时,
$pattern = '/<li>(.*?)<\/li>/s';
返回第一个结果
那是“这是一个关于asp的列表”
答案 0 :(得分:1)
最简单的解决方案是删除/s
修饰符。然后每个匹配将限制为一行,因为.
无法匹配换行符。
但是只有在样本中格式化HTML时才有效,每个元素都在一个单独的行上,而元素的内容中没有换行符。这是一个更强大的解决方案:
$pattern = '~<li>[^<]*php[^<]*</li>~'
但请注意,即使在完全有效的HTML中,仍有许多因素可能导致正则表达式失败。除非这是一次性的,一次性的工作,否则你应该认真考虑使用其他响应者建议的HTML专用工具。
答案 1 :(得分:0)
您需要网站抓取工具和解析器。有一个名为PHPCrawl的项目,使用此lib,您可以抓取网站并获取内容。然后,您可以在源代码中解析和搜索指定的模式。如果你想要,你可以使用正则表达式。
但我认为你不是第一个出现这个问题的Stackoverflow。也许你应该在这里搜索,你会得到更多的信息。