我需要从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”,因此我不知道如何将它们从等式中排除。任何想法都将受到高度赞赏。
答案 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。
希望这会有所帮助,或者无论如何让你更近。