【问题标题】:Regex to replace all html tag except br and p tag perl正则表达式替换除 br 和 p 标签 perl 之外的所有 html 标签
【发布时间】:2016-02-17 18:57:52
【问题描述】:

我有一个字符串,我会得到这么多的 html 标签,我想用空格替换它们。我们该怎么做,请建议我。这是我的字符串:

Wrong html <a> </I> <p>My paragraph</p> <i>Italics</i> <p class="blue">second</p> and the string is <br> after that test.

我已经尝试过了,但没有相应的工作:

$string =~ s/(<((?!br|p)[^>]+)>)//ig;

【问题讨论】:

  • 所有要求正则表达式解析 XML 的问题的必填链接:stackoverflow.com/a/1732454/18157
  • @JimGarrison 在我的情况下我必须做什么请帮忙
  • 为什么不只是strip_tags()
  • @ʰᵈˑ 呃……因为这是 Perl 而不是 PHP?
  • @MattJacob 该死的,错过了以某种方式阅读标签,idek:c

标签: regex perl


【解决方案1】:

你需要处理结束标签:

use Modern::Perl;

my $str = 'Wrong html <a> </I> <p>My paragraph</p> <i>Italics</i> <p class="blue">second</p> and the string is <br> after that test.';

$str =~ s~<(?!/?\s*br|/?\s*p)[^>]+>~~ig;
say $str;

你也可以使用包HTML::StripTags:

use HTML::StripTags qw(strip_tags);

my $str = 'Wrong html <a> </I> <p>My paragraph</p> <i>Italics</i> <p class="blue">second</p> and the string is <br> after that test.';
my $allowed_tags = '<p><br>';

say strip_tags( $str, $allowed_tags );

【讨论】:

    【解决方案2】:

    在您的正则表达式中,您没有提到替换字符或分隔符。在您的情况下,您应该用空格代替。 正则表达式为:

    $msg =~s/(<((?!br|p)[^>]+)>)/ /ig;
    

    【讨论】:

    • 就目前的答案而言,它的质量非常低(而且会出错)
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    相关资源
    最近更新 更多