我正面临Perl正则表达式的问题。在img元素上,我想匹配rel,class,alt src属性。但是如果alt属性存在则alt属性应该是强制匹配,然后应该获取其文本。但是我面临着alt属性存在的问题,在src属性之后存在Firefox和chrome alt属性,而在IE浏览器上它存在于src属性之前。
因为我希望alt属性作为强制匹配,但有时它在src属性之前,有时在src属性之后。下面是img元素源代码。请帮忙!
在Chrome和Firefox上:
<img rel="lightbox[45876]" src="/file?id=13455" class="bbc_img" alt="effectgames777.jpg">
<img rel="lightbox[45876]" src="/file?id=13455" class="bbc_img">
在IE浏览器上:
<img rel="lightbox[45876]" class="bbc_img" alt="effectgames777.jpg" src="/file?id=13455">
<img rel="lightbox[45876]" class="bbc_img" src="/file?id=13477">
我在perl regex下面创建了但是它不匹配alt属性作为强制。请帮忙!
<img(?:|\s+rel="[^"]*")(?:|\s+class="[^"]*")(|\s+alt="([^"]*)") src\=\"(http\:\/\/domain\.com\/(\d+)\/thumb\/(\d+)|\/file\?id\=(\d+))\"(?:|\s+class="[^"]*")(|\s+alt="([^"]*)")\>
答案 0 :(得分:2)
它必须只是一个正则表达式吗?
use Data::Dumper;
my $s = q{<img rel="relfoo" src="srcfoo">};
my @m;
$s =~ m{
<img \s+
(
((\w+)(?{push @m, $^N}))
=
"( ([^"]*) (?{push @m, $^N}) )"
\s*
)+
>
}x;
my %h = @m;
print Dumper \%h;
die "alt is mandatory..\n" if !exists $h{alt};
输出
$VAR1 = {
'rel' => 'relfoo',
'src' => 'srcfoo'
};
alt is mandatory..