2010-12-06 4 views
1

HTMLソースから文字列をgrepしたい、実際にはYouTubeリンクのビデオID。 HTMLのPerlで2つの文字列をグリフする

例の一部は、文字列変数に入れ:

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

私は全体のHTMLソースからのみビデオリンクIDを望みます。

私は正規表現ウィジェットでこれをテストしたが、私はPerlでそれを置く方法がわからない:

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

私はちょうど2つの単語のパターンの間の文字列をしたい:

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

'の#include ' ;-)を、この特定の場合には正規表現が実際ですが....あなたが何をしているのか分かっているなら、十分なツール - 回答に私のコメントを参照してください) – DVK

答えて

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

+0

ありがとうございました。 – Paisal

+0

これはほぼ正しいですが、HTMLが空白不変で、 "、"と角かっこの間や "href"の前に改行がある可能性があることを考慮する必要があります。夜は起こりそうもないかもしれませんが、あなたのRegExはそれに対処するのに十分柔軟である方が良い – DVK

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

ありがとう皆さんありがとうございます。非常に迅速な返信。 – Paisal

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 }; 
関連する問題