在Perl中的两个字符串之间的grepping

时间:2010-12-06 02:18:22

标签: regex perl youtube grep

我想从HTML源代码中获取一个字符串,实际上是一个YouTube链接视频ID。

放入字符串变量的HTML示例部分:

$string = 'etc... Your video, <a href="http://www.youtube.com/watch?v=1InOB234543">video name</a>, etc...';

我只想要整个HTML源代码中的视频链接ID。

我在Regex Widget中对此进行了测试,但我不知道如何将它放在Perl中:

/video, <a href="http://www.youtube.com/watch\?v=(.*)"/

我只想在两个单词模式之间添加一个字符串:

between 'Your video, <a href="http://www.youtube.com/watch?v='
and     '">'

3 个答案:

答案 0 :(得分:3)

if ($string =~ m{video, <a href="http://www\.youtube\.com/watch\?v=(.*)"}) {
     $video_id = $1;
} else {
     # pattern didn't match
}

请注意,我们使用{}分隔符而不是通常的//分隔符,因为该模式包含否则需要转义的斜杠。此外,www.youtube.com中的句号需要转义,否则它们将被解释为通配符。

答案 1 :(得分:2)

my($afterv) = ($text =~ m!video, <a href="http://www\.youtube\.com/watch\?v=(.*)"!

答案 2 :(得分:2)

这使用来自CPAN的HTML::LinkExtractor,因此它将与包含多个链接的文档一起使用:

use strict;
use warnings;

use HTML::LinkExtractor;

my $input = q{etc... Your video, <a href="http://www.youtube.com/watch?v=1InOB234543">video name</a>, etc...};
my $extractor = HTML::LinkExtractor->new;

$extractor->parse(\$input);

my @ids = map {$_->{href} =~ /watch\?v=(.*)/ }  @{ $extractor->links };