我想替换:
'''<font size="3"><font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font></font>'''
Run Code Online (Sandbox Code Playgroud)
附:
='''<font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font>'''=
Run Code Online (Sandbox Code Playgroud)
现在我的现有代码是:
$html =~ s/\n(.+)<font size=\".+?\">(.+)<\/font>(.+)\n/\n=$1$2$3=\n/gm
Run Code Online (Sandbox Code Playgroud)
然而,最终结果如下:
=''' SUMMER/WINTER CONFIGURATION FILES</font>'''=
Run Code Online (Sandbox Code Playgroud)
现在我可以看到正在发生的事情,它匹配<font size ="..... all the way up to the end of the <font colour blue">的不是我想要的,我希望它停止在第一个实例"不是最后一个,我认为那是什么把那个标记放在那里,但是我已经尝试.+.+?.*和.*?每次都有相同的结果.
任何人都有任何想法我做错了什么?
写.+? 在所有地方,使每场比赛不贪婪.
$html =~ s/\n(.+?)<font size=\".+?\">(.+?)<\/font>(.+?)\n/\n=$1$2$3=\n/gm
^ ^ ^ ^
还要尽量避免使用正则表达式来解析HTML.如果可能,请使用HTML解析器.
正如 Mark 所说,只需使用CPAN即可。
#!/usr/bin/env perl
use strict; use warnings;
use HTML::TreeBuilder;
my $s = q{<font size="3"><font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font></font>};
my $tree = HTML::TreeBuilder->new;
$tree->parse( $s );
print $tree->find_by_attribute( color => 'blue' )->as_HTML;
# => <font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font>
Run Code Online (Sandbox Code Playgroud)
但是,这适用于您的具体情况:
#!/usr/bin/env perl
use strict; use warnings;
my $s = q{<font size="3"><font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font></font>};
print $s =~ m{
< .+? >
(.+)?
</.+? >
}mx;
# => <font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font>
Run Code Online (Sandbox Code Playgroud)