请参阅以下脚本:
#!/usr/bin/env perl
use strict;
use warnings;
my $string = "65378161_12011_Q.pdf";
if($string =~ m/((.*)?Q\.pdf)/i ){
my $inside=$2;
print " file name:$inside \n";
}
您的代码只是缺少“?” 告诉正则表达式不要贪婪的字符。
另一种方法是匹配自身之前不是“Q”的所有字符:
m/(^[^Q]+)?Q\.pdf/i
编辑:因为您使用不同的规范编辑了您的帖子:如果您需要解析 HTML,我建议使用适当的模块:
不要使用正则表达式解析或修改 html!查看 HTML::Parser 的子类之一:HTML::TokeParser、HTML::TokeParser::Simple、HTML::TreeBuilder(::Xpath)?、HTML::TableExtract 等。如果您的响应开始“那是矫枉过正。我只想要到……”你错了。
http://en.wikipedia.org/wiki/Chomsky_hierarchy以及
为什么不在HTML 上使用正则表达式
(这是关于使用正则表达式从 irc.freenode.org 上的#perl 频道解析 HTML 的提醒)
编辑2:
这是一个完整的工作示例:
#!/usr/bin/env perl
use strict;
use warnings;
use HTML::TreeBuilder;
my $tree = HTML::TreeBuilder->new_from_content('
<LI>
<A
HREF="65378161_12011_Q.pdf">
65378161_12011_Q.pdf
</A>
');
$tree->look_down("_tag", "a")->as_text =~ m/(^[^Q]+)Q\.pdf/i && print "$1\n";