【问题标题】:regex php - find things in div with specific ID正则表达式 php - 在具有特定 ID 的 div 中查找内容
【发布时间】:2011-10-28 03:14:59
【问题描述】:

我确信这是一个简单的问题,而且我已经在 SO 上搜索和搜索了很多内容 - 我似乎无法弄清楚这有什么问题。我在此页面上的其他区域使用了类似的表达式,这些表达式完全返回了我想要的内容。

但是,我无法让这个特殊的位返回我想要的,所以也许有人可以帮助我。

我有一个具有特定 ID“user-sub-commhome”的 div - 我想从该 div 中提取文本。文本被标签包围,但我可以轻松地使用 strip_tags 来消除这些标签。我正在使用正则表达式来尝试提取数据。

这是我的代码:

$intro = "<div id="user-sub-summary">Summary</div>
<div id="user-sub-commhome"><em>Commercial</em></div>
<div id="whatever">whatever</div>";

$regex = '#\<div id="user-sub-commhome"\>(.+?)\<\/div\>#s';
preg_match($regex, $intro, $matches);
$match = $matches[0];
echo $match;

我尝试过改变事情但没有成功,似乎没有什么可以回应任何事情。所以我希望那些对正则表达式更有经验的人可以提供帮助。

【问题讨论】:

  • 不确定这是否只是示例代码,但您的 $intro 变量不正确,因为它没有被正确转义。
  • 我建议您尝试使用 html 解析器而不是正则表达式来完成此任务。见stackoverflow.com/q/1732348/159388
  • 是的,这只是示例代码。 $intro 实际上是一大块 html - 我只是举个例子,这样人们就可以更清楚地看到我在说什么。
  • 您的模式在 HTML 中运行良好,没有考虑 Devator 注意到的 PHP 语法错误。转义双引号。

标签: php regex html extract


【解决方案1】:

如果您将 $intro 周围的封闭双引号更改为单引号,您的代码对我有用:

$intro = '<div id="user-sub-summary">Summary</div>
<div id="user-sub-commhome"><em>Commercial</em></div>
<div id="whatever">whatever</div>';

$regex = '#\<div id="user-sub-commhome"\>(.+?)\<\/div\>#s';
preg_match($regex, $intro, $matches);
$match = $matches[0];
echo $match;

您可能想阅读some famous advice 的正则表达式和 HTML。

【讨论】:

    【解决方案2】:

    我不会解释为什么using regular expressions to parse php is a bad idea。我认为这里的问题是您没有激活错误报告,或者您根本没有查看错误日志。以您的方式定义$intro-string 应该会导致很多问题(意外/未终止的字符串)。它应该是这样的:

    $intro = "<div id=\"user-sub-summary\">Summary</div>
    <div id=\"user-sub-commhome\"><em>Commercial</em></div>
    <div id=\"whatever\">whatever</div>";
    

    或者这个:

    $intro = '<div id="user-sub-summary">Summary</div>
    <div id="user-sub-commhome"><em>Commercial</em></div>
    <div id="whatever">whatever</div>';
    

    如果您在双引号字符串中使用双引号,则必须使用反斜杠 (\) 将它们屏蔽。另一种方法是对字符串使用单引号(就像在我的第二个示例中一样)。

    【讨论】:

    • 谢谢 - 我应该在原始版本中澄清 HTML 块仅用于示例目的......我的代码实际上如下所示: $intro = $form->data['introtext '];这只是带来了一大块 HTML——我还有其他的正则表达式,它们的编写方式几乎相同(除了它们说“用户子摘要”或我试图获取的任何 ID)并且它们都可以工作。只是想看看是否有人能发现这个问题......
    【解决方案3】:

    在您的示例代码中$matches[0] 包含所有匹配的部分,而不是捕获组。捕获组在$matches[1]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2019-07-19
      • 2011-03-17
      • 1970-01-01
      相关资源
      最近更新 更多