2010-12-06 7 views
1

Я хочу, чтобы grep строка из источника HTML, на самом деле YouTube ссылка видео ID.Грепинг между двумя строками в Perl

Пример часть HTML положить в строковой переменной:

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

Я хочу только видеосвязь идентификатор из всего источника HTML.

Я испытал это в Regex Widget, но я не знаю, как поставить его в Perl:

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

Я просто хочу строку между двумя узорами слова:

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

`#include ` ;-) .... хотя в данном конкретном случае RegEx является на самом деле достаточно хороший инструмент, если вы знаете, что делаете, - см. мой комментарий к ответу) – DVK 2010-12-06 13:33:35

ответ

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

Извещение Мы использовали ограничители {} вместо обычных разделителей //, так как шаблон содержит косые черты, которые в противном случае должны были бы экранироваться. Кроме того, полные остановки в www.youtube.com должны быть экранированы, поскольку в противном случае они интерпретируются как подстановочные знаки.

+0

m {} совпадает с m // (это «оператор m», а не «оператор m {}»). – user502515 2010-12-06 02:29:23

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

Большое спасибо, ребята. Это работа. очень быстрый ответ. – Paisal 2010-12-06 03:17:08

2

Это использует HTML::LinkExtractor из CPAN, поэтому он будет работать с документом, содержащим несколько ссылок:

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 }; 
Смежные вопросы