【问题标题】:Get all text but not the regex match [duplicate]获取所有文本,但不获取正则表达式匹配 [重复]
【发布时间】:2019-03-08 18:00:44
【问题描述】:

嗨 :)

我尝试获取所有与正则表达式不匹配的文本, 我用PHP

我的正则表达式是:

/(<[^>]+>)/is

我会得到 HTML 标记内的所有文本

我之前试过:(?!(&lt;[^&gt;]+&gt;)) 和很多东西......

输入:

<html><head><title>Nice page</title></head>
<body>Hello World <a href=http://cyan.com title="un lien">Ceci est un lien</a> <a>sdfaf</a>
<br /><a href=http://www.riven.com> Et ca aussi <img src=wrong.image title="et encore ca">dd</a>
</body></html>

我想用正则表达式匹配html标签内的所有文本,

喜欢:

" 不错的页面 Hello World Ceci est unlien sdfaf Et ca aussi dd "

谢谢!! :)

【问题讨论】:

  • 分享代码,请添加更多细节。
  • 请举例说明您尝试实现的目标,这样会更容易理解和帮助
  • 这个它用于特定标签,我会有一个所有标签的正则表达式
  • 我永远不会错过发布此链接的机会:stackoverflow.com/a/1732454/3578036

标签: php html tags


【解决方案1】:

使用 DOMDocument 来做到这一点:

$dom = new DOMDocument;
$dom->loadHTML($yourstring);
$xp = new DOMXPath($dom);

foreach($xp->query('//text()') as $textNode) {
    echo $textNode->nodeValue, PHP_EOL;
}

【讨论】:

    【解决方案2】:

    有一个 strip_tags() 函数无需进一步配置即可完成此操作

    <?php
    $input = '<html><head><title>Nice page</title></head><body>Hello World <a href=http://cyan.com title="un lien">Ceci est un lien</a><a>sdfaf</a><br /><a href=http://www.riven.com> Et ca aussi <img src=wrong.image title="et encore ca">dd</a><body></html>';
    print( strip_tags($input) );
    

    【讨论】:

    • 是的,但strip_tags 的问题在于它连接所有文本而没有分隔符,这给出了类似:Nice pageHello World...
    【解决方案3】:

    这个正则表达式应该部分选择所有文本内容:

    /&gt;([^&lt;]+)/g

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 2011-06-27
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多