【问题标题】:php preg_match pattern to extract a specific information, regexphp preg_match 模式提取特定信息,正则表达式
【发布时间】:2010-06-13 04:00:37
【问题描述】:

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

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

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

但是在这种情况下,我也得到了使用的“ids”,所以我不知道如何将它们从等式中排除。任何想法将不胜感激。

【问题讨论】:

  • 哇?第 1 步:给我们一个您实际想要返回的数据的示例。第 2 步:使用解析器,它会让您的生活更轻松。
  • 如您所见,我需要提取 javascript:tw( 和 ) 之间的数据。一个例子可能是 272896、309206、308845 等......我遇到的问题是一些 html 块包含“使用”字......“Used”......我应该不要从包含“使用”字的块中提取信息。

标签: php regex preg-match


【解决方案1】:

试试这个:

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

但是,您应该知道,有 99.9% 的可能性有更好的方法来做到这一点。您有权访问数据源吗?

【讨论】:

  • 不幸的是,您的模式没有返回任何结果。我无权访问数据源或任何 api ....
【解决方案2】:

使用print_r($matches)

已编辑:

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

【讨论】:

  • 好的,如何仅提取 html 块中没有“使用”字样的信息?如果我从我的模式中打印匹配项,它会返回所有 Id(在 html 块中使用过 word 而没有)
  • 编辑后的答案只回显数字。其他答案请参考stackoverflow.com/questions/3035258/…。 :)
【解决方案3】:

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

一旦你将块分开,那么你可以使用preg_grep() 来查找不包含'used'的块。所以做这样的事情:

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

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

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

希望这会有所帮助,或者让你更接近。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2013-04-05
    • 2014-06-28
    相关资源
    最近更新 更多