[英]Replace characters in an HTML document that match a regex, except those inside tags
我想替换HTML文档中除模式之外的所有匹配模式的字符。 如何使用Perl或sed使用正则表达式?
示例:将所有“a”替换为“b”,但如果“a”替换为<a href="aaa">
类的HTML标记,则<a href="aaa">
。
正如评论中指出的那样,HTML解析器是您解决问题的理想解决方案,但是如果您出于任何原因想要使用正则表达式,则以下方法将起作用:
a(?![^<]*>)
在Perl中 :
$var = "salut <a href='a.html'></a> ah ha <a href='about.asp' /> animal";
# ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
$var =~ s/a(?![^<]*>)/b/g;
print $var;
输出:
sblut <a href='a.html'></a> bh hb <a href='about.asp' /> bnimbl
^ ^ ^ ^ ^
恢复这个古老的问题,因为它有一个没有提到的简单解决方案。
有了所有关于使用正则表达式解析html的免责声明,这是一个简单的方法。
#!/usr/bin/perl
$regex = '<[^>]*|(a)';
$subject = 'aig arother <a href="aaa">';
($replaced = $subject) =~ s/$regex/
if (defined $1) {"b";} else {$&;} /eg;
print $replaced . "\n";
看到这个现场演示
参考
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.