可能重复:
How can I extract URL and link text from HTML in Perl?
我正在尝试在字符串中获取子字符串。字符串中可能有多个匹配的字符串。
<LI>
<A
HREF="65378161_12011_Q.pdf">
65378161_12011_Q.pdf
</A>
从上面的字符串我想得到文件名“65378161_12011_Q.pdf”。
if($line=~ m/((.*)Q\.pdf)/i ){
my $inside=$2;
print " file name:$inside \n";
}
这是我尝试但它没有得到正确的子字符串。 有人可以帮忙解决这个问题。 如果有人能回答我的问题,我真的很感激。
答案 0 :(得分:0)
请参阅以下脚本:
#!/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和 here为什么不在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";
答案 1 :(得分:0)
use strictures;
use Web::Query qw();
my $w = Web::Query->new_from_html(<<'HTML');
<LI>
<A
HREF="65378161_12011_Q.pdf">
65378161_12011_Q.pdf
</A>
HTML
$w->find('a')->attr('href');
# expression returns '65378161_12011_Q.pdf'
$w->find('a')->text;
# expression returns ' 65378161_12011_Q.pdf '
答案 2 :(得分:-1)
从那以后。将匹配所有内容,只需删除它周围的括号。
#!/usr/bin/perl
my $line = "65378161_12011_Q.pdf";
if ($line =~ m/(.*Q\.pdf)/i )
{
my $inside = $1;
print "filename = $inside\n";
}
生成正确的输出。
希望它有所帮助。
曼尼