【问题标题】:how to use regex with the function preg_match_all to obtain a string如何使用正则表达式和函数 preg_match_all 来获取字符串
【发布时间】:2012-01-06 13:35:12
【问题描述】:

我可以使用什么正则表达式代码来查找 html 标签,然后从中提取字符串?

<?php 

$html = "<span class="equipped">360</span>"
$match = preg_match("???", $html, $matches);

?>

【问题讨论】:

  • 首先我建议使用' 或转义" 来修复您的$html 字符串
  • 这太模棱两可了;在什么上下文中,您特别想找到什么字符串?此外,您的 PHP 有语法错误(双引号中的双引号),您不应该使用正则表达式来解析 HTML。
  • 您需要先按顺序获取您的字符串语法。编写正则表达式很简单,因为大多数固定字符可以保持原样。您只需要一个占位符即可。有关正则表达式语法和示例,请参阅 PHP 手册:php.net/manual/en/reference.pcre.pattern.syntax.php

标签: php regex preg-match-all


【解决方案1】:

您永远不应该使用正则表达式解析 HTML...您会发现很多 here 解释为什么您不应该这样做。

您可以查看this 之前的 SO 帖子,其中讨论了允许您通过 PHP 处理 HTML 的各种框架,例如 phpQueryQueryPath

【讨论】:

    【解决方案2】:

    正如 npinti 指出的那样,您不应该使用正则表达式来解析非常规语言。相反,您可以使用 PHP 的 DOMDocument 来查找您想要的任何节点的文本。下面是一个捕获&lt;span&gt; 元素内部文本的示例,以及一个展示其工作原理的演示。

    $html = "<span>Text</span>";
    $doc = new DOMDocument();
    $doc->loadHTML( $html);
    
    $elements = $doc->getElementsByTagName("span");
    foreach( $elements as $el)
    {
        echo $el->nodeValue . "\n";
    }
    

    Demo

    编辑:我的示例显示了使用半完整的 HTML 文档,但 DOMDocument 也将成功解析 HTML 字符串,例如 $html = '&lt;span&gt;Text&lt;/span&gt;';,请参阅 here

    【讨论】:

    • DOMDocument 是题外话,除非有人有礼貌地重新标记问题。如果问题总是与实际要求的相反(即使 OP 毫无头绪),那么搜索 SO 就毫无用处。反对票主要是针对“正则表达式”与“非正则语言”的谬误。现代正则表达式不是常规语言。
    • 我不明白这是一个谬论 - HTML 是不规则的,使用正则表达式是错误的工作工具。问题是如何使用正则表达式提取 HTML span 元素的内部文本。第一个答案是为什么你不应该使用正则表达式。第二个答案显示了如何在没有正则表达式的情况下做到这一点。问题出在哪里?
    • 两个问题。首先,it's not true。其次,给 OP 一个现成的解决方案没有教育价值。 (甚至可能比尊重他对魔法正则表达式 codez plz 的字面要求更糟糕)。此外,这是一个骗局。
    • mario 我正在努力学习,很抱歉询问正则表达式代码是什么样的。
    • @nickb - 除了将 html 放入字符串中,我还可以放入 url 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多