2

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

4

2 回答 2

1

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

但这仅适用于 HTML 的格式与您的示例相同,每个元素位于单独的行且元素内容中没有换行符。这是一个更强大的解决方案:

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

但请注意,有很多事情会导致正则表达式失败,即使是在完全有效的 HTML 中也是如此。除非这是一次性的一次性工作,否则您应该认真考虑使用其他响应者建议的 HTML 特定工具。

于 2012-08-23T15:19:25.840 回答
0

You need a website crawler and a parser. There is a project called PHPCrawl with this lib you can crawl the site and get the content. Then you can parse and search in the source code for the specified pattern. If you want you can do it with a regex.

But i think you are not the first here on Stackoverflow with this problem. Perhaps you should search here and you'll get some more information.

于 2012-08-23T12:59:16.023 回答