从具有特定单词的网站获取字符串

时间:2012-08-23 12:52:47

标签: php regex string list preg-match

网站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的列表

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是删除/s修饰符。然后每个匹配将限制为一行,因为.无法匹配换行符。

但是只有在样本中格式化HTML时才有效,每个元素都在一个单独的行上,而元素的内容中没有换行符。这是一个更强大的解决方案:

$pattern = '~<li>[^<]*php[^<]*</li>~'

但请注意,即使在完全有效的HTML中,仍有许多因素可能导致正则表达式失败。除非这是一次性的,一次性的工作,否则你应该认真考虑使用其他响应者建议的HTML专用工具。

答案 1 :(得分:0)

您需要网站抓取工具和解析器。有一个名为PHPCrawl的项目,使用此lib,您可以抓取网站并获取内容。然后,您可以在源代码中解析和搜索指定的模式。如果你想要,你可以使用正则表达式。

但我认为你不是第一个出现这个问题的Stackoverflow。也许你应该在这里搜索,你会得到更多的信息。