如何将“&lt;”和“&gt;”替换为“&lt;”和“&gt; Perl中的<img src=""/>和<a href="">text</a>标记除外

时间:2013-07-23 11:39:31

标签: html perl replace tags

我想通过使用正则表达式将<>替换为&lt;&gt;,而不是Perl中的<img src=""><a href="">text</a>标记:< / p>

$a= qq~<a href="">test</a> <script> <img src="">~;
$a =~ s/<([^img|a])/&lt;$1/ig;
$a =~ s/([^<a(.*?)])>/$1&gt;/ig;
print "\n$a\n";

但它取代了内部'&gt;'也喜欢

<a href=""&gt;test&lt;/a> &lt;script&gt; <img src=""&gt;

1 个答案:

答案 0 :(得分:1)

您可以尝试这种直截了当的方法:

$a =~ s/</&lt;/g;
$a =~ s/>/&gt;/g;
# Fix "a" & "img"
$a =~ s/&lt;a\s(.*?)&gt;(.*?)&lt;\/a&gt;/<a $1>$2<\/a>/g;
$a =~ s/&lt;img\s(.*?)&gt;/<img $1>/g;

注意:

[^img|a]not i,m,g,a or |

如果您需要查找<后面没有imga,请使用否定前瞻:

/<(?!img|a)/