【问题标题】:Get all text inside html tag with regex?使用正则表达式获取html标签内的所有文本?
【发布时间】:2014-04-06 13:55:26
【问题描述】:

例如,我有 HTML:

<strong>this one</strong> <span>test one</span>
<strong>this two</strong> <span>test two</span>
<strong>this three</strong> <span>test three</span>

如何使用正则表达式使所有文本变得强大并跨越?

【问题讨论】:

  • 为什么不使用DomDocument
  • 第一步是学习正则表达式。第二步是使用 preg_match 等函数应用您的新知识。

标签: php regex function dom output


【解决方案1】:

使用DOM 并且从不使用正则表达式来解析 HTML。

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('strong') as $tag) {
   echo $tag->nodeValue."<br>";
  }
foreach ($dom->getElementsByTagName('span') as $tag) {
    echo $tag->nodeValue."<br>";
}

OUTPUT :

this one
this two
this three
test one
test two
test three

Demo


为什么我不应该使用正则表达式来解析 HTML 内容?

HTML 不是常规语言,因此不能被常规语言解析 表达式。正则表达式查询不具备将 HTML 分解为 它有意义的部分。这么多次,但它没有得到我。甚至 Perl 使用的增强的不规则正则表达式不符合 解析 HTML 的任务。

那篇文章来自我们的 Jeff Atwood。阅读更多here.

【讨论】:

    【解决方案2】:

    使用DOMDocument 加载 HTML 字符串,然后使用 XPath 表达式获取所需的值:

    $dom = new DOMDocument;
    $dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    
    foreach ($xpath->query('//strong | //span') as $node) {
        echo $node->nodeValue, PHP_EOL;
    }
    

    输出:

    this one
    test one
    this two
    test two
    this three
    test three
    

    Demo

    【讨论】:

    • 这看起来更好+1
    【解决方案3】:

    您可以使用捕获的组。以下是一些示例:

    &lt;strong&gt;([^\&lt;]*)&lt;\/strong&gt;

    演示:http://regex101.com/r/sK5uF2

    &lt;span&gt;([^\&lt;]*)&lt;\/span&gt;

    演示:http://regex101.com/r/vJ2kP3

    在每一个中,第一个捕获的组是您的文本:\1$1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 2018-04-30
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      相关资源
      最近更新 更多