php preg_match模式提取特定信息,正则表达式

时间:2010-06-13 04:00:38

标签: php regex preg-match

我需要从html文档中提取特定的ID,但问题是id不能“被使用”。

这是html内容 http://pastebin.com/wF2dx8JZ

正如您所看到的,有不同的html块。其中一些包含“Used”字样,所以我只需要提取第一个未使用的id。   基本上我可以写一个简单的模式,如:   $ pattern =“/ javascript:tw(.*))/”;   preg_match_all($ pattern,$ content,$ matches);  $ id = $ matches [1] [0];

然而在这种情况下,我也得到了使用的“ids”,因此我不知道如何将它们从等式中排除。任何想法都将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

试试这个:

if (preg_match_all('~Used.*?javascript:tw\((\d+)\)~ig', $content, $matches))
{
    print_r($matches);
}

但是,你应该知道,有99.9%的机会有更好的方法来做到这一点。您是否有权访问数据源?

答案 1 :(得分:0)

使用print_r($matches)

<强>编辑:

preg_match('#\(([^)]+)\)#', $matches[1][0], $m);
echo $m[1];

答案 2 :(得分:0)

这取决于你的html“块”如何存储在内存中。你有一个字符串数组,每个字符串包含一个“块”的html?如果没有,你可以使用PHP的explode()函数创建一个吗? (例如,如果该注释序列实际上是您数据的一部分而不是您添加的内容,则为$html_blocks = explode("<!---->", $all_html);。)

将块分开后,您可以使用preg_grep()查找不包含“已使用”的块。所以做这样的事情:

$unused_blocks = preg_grep("Used", $html_blocks, PREG_GREP_INVERT);

如果您想更加注意匹配,可以使用另一个正则表达式作为第一个参数。

现在你有$unused_blocks,这是一个'未使用'的html字符串数组。然后,您可以使用已经工作的preg_match()模式为每个模式提取ID。

希望这会有所帮助,或者无论如何让你更近。