Разрыв между двумя строками в Perl - PullRequest
1 голос
/ 06 декабря 2010

Я хочу получить строку из источника HTML, на самом деле YouTube идентификатор видео ссылки.

Пример части 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     '">'

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010
if ($string =~ m{video, <a href="http://www\.youtube\.com/watch\?v=(.*)"}) {
     $video_id = $1;
} else {
     # pattern didn't match
}

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

2 голосов
/ 06 декабря 2010

Используется 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 };
2 голосов
/ 06 декабря 2010
my($afterv) = ($text =~ m!video, <a href="http://www\.youtube\.com/watch\?v=(.*)"!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...