我想从内联样式属性中删除一些特定的css规则(即宽度和高度)。
所以我想改变以下内容:
<table id="foo" style="border:1px #000 solid; width: 100px; height: 100px;">
到
<table id="foo" style="border:1px #000 solid">
有一个方便的正则表达式可以解决我的问题吗?
提前谢谢大家
答案 0 :(得分:0)
您的问题不是很具体,但/[\s;"']width: .+;/
怎么样?你需要将它提供给替换函数或其他东西,但我无法帮助你,因为我不知道你在用什么语言。
答案 1 :(得分:0)
不,你通常不能在正则表达式中完成所有这些,因为HTML不是常规语言。
使用HTML解析器从style
标记获取table
属性,然后使用正则表达式width:.+?(;|$)
和height:.+?(;|$)
。
答案 2 :(得分:0)
在编辑器中启用正则表达式搜索,然后尝试:
width="[^"]*"
height="[^"]*"
答案 3 :(得分:0)
也许尝试这个(在Vim和Ruby中测试):
/(width|height):\s*\d+(px|%);?//
当然你应该使用编辑器(或语言)的regexp语法(例如在Vim中你必须在'(','|',')'和'+'之前加上反斜杠
答案 4 :(得分:0)
注意:正则表达式无法正确解析HTML。
改为使用解析器。
#! /usr/bin/perl
use warnings;
use strict;
use HTML::Parser;
die "Usage: $0 html-file\n" unless @ARGV == 1;
sub start {
my($tag,$attr,$attrseq,$text,$skipped) = @_;
print $skipped;
unless ($attr->{style} && $attr->{style} =~ /width|height/) {
print $text;
return;
}
my %style = $attr->{style} =~ /
\s* # optional leading space
(.+?) : # property, e.g., width
\s* # optional separating space
([^;]+) # value, e.g., 100px
;? # optional separator
/gx;
delete @style{qw/ width height /};
$attr->{style} = join "; " =>
map "$_: $style{$_}",
keys %style;
print "<$tag ",
join(" " => map qq[$_="$attr->{$_}"], @$attrseq),
">";
}
my $p = HTML::Parser->new(
api_version => 3,
marked_sections => 1,
start_h => [ \&start => "tag, attr, attrseq, text, skipped_text" ],
end_h => [ sub { print @_ } => "skipped_text, text" ],
);
undef $/;
$p->parse(<>);