我正试图匹配本文:
<a href="http://english317.ning.com/profiles/blogs/bad-business-writing-487">Continue</a>
</div>
<p class="small">
Added by <a href="/profile/KemberleyRamirez">Kemberley Ramirez</a> on September 2, 2010 at 11:38pm
我希望获得/ blogs之后的文本(例如“bad-business-writing-487”)以及字符串(学生姓名和提交日期)(例如“Kemberley Ramirez”于2010年9月2日在下午11点38分“)
我正在使用带有Perl表达式的UltraEdit。
答案 0 :(得分:3)
我不知道你想要匹配的是什么,但你最好使用正确的HTML解析器:
#!/usr/bin/perl
use strict; use warnings;
use HTML::TokeParser::Simple;
my $parser = HTML::TokeParser::Simple->new(\*DATA);
my $blog_re = qr{^http://english317.ning.com/profiles/blogs/(.+)\z};
my $profile_re = qr{^/profile/(\w+)\z};
while ( my $tag = $parser->get_tag('a') ) {
next unless my ($href) = $tag->get_attr('href');
if ( $href =~ $blog_re or $href =~ $profile_re ) {
print "[$1]\n";
}
}
__DATA__
<a href="http://english317.ning.com/profiles/blogs/bad-business-writing-487">Continue</a>
</div>
<p class="small">
Added by <a href="/profile/KemberleyRamirez">Kemberley Ramirez</a> on September 2, 2010 at 11:38pm
答案 1 :(得分:0)
在“dot match newline”模式下使用PowerGrep,我想出了这个:
(?>profiles/blogs/(.*?)").*?added by(.*?)</a>(.*?2010.*?\d{2}[ap]m)
(然后进行额外的处理搜索)
<
的a *&GT;??
答案 2 :(得分:-1)
/ s和/ m修饰符控制多行的处理方式。 见perlretut
你可能想要像rrr reg.exps这样的/ s修饰符,或类似的东西:(未经测试)
$foo =~ m|blogs/([^"]+).*Added by <[^>]+>([^<]+)</a>|s
使用m ||而不是//以避免所有逃脱..
答案 3 :(得分:-2)
以下应该适用于多行:
.*blogs\/(\S+)".*\(\n.*\)*<a.*>(.*)<\/a>(.*)