繁体   English   中英

替换HTML文档中与正则表达式匹配的字符,但标记内的字符除外

[英]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(?![^<]*>)

RegExr上的工作示例输入相同。

在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";

看到这个现场演示

参考

如何匹配模式除了情况s1,s2,s3

除非......如何匹配模式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM