正则表达式替换除br和p标签perl之外的所有html标记

时间:2016-02-17 06:16:10

标签: regex perl

我有一个字符串,我会得到这么多的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;

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:-1)

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

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