2011-09-28 16 views
31

私は、この正規表現を探して生のhtmlのページをスキャンしているとしましょう。 (最後の引用符は意図的です)。Perlが各一致を反復する

m/(https?:\/\/.*?(?:'|"))/ 

このパターンは〜100回一致する可能性があります。共通のperlイディオムとは何ですか?/すべてのキャプチャグループのマッチのリストを反復する簡単な方法ですか? perlretut(非常に細かいチュートリアル)から

答えて

49

while ($x =~ /(\w+)/g) { 
     print "Word is $1, ends at position ", pos $x, "\n"; 
    } 

あなたはあなたのキャプチャグループ1のコンテンツを取得$1で、すべての一致を反復処理するためにg修飾子と一緒にwhileを使用しており、この中にすることができますチュートリアルの例では、posの位置も取得します。

+1

ありがとうstema::次のコードは、あなたの例を理解

my $str = 'file_%date%_%name%_%lang%.txt'; my @ts = $str =~ /%([\w]+)%/g;# <----------Zahid said print join(", ", @ts); 

出力するために役立つことを願っています、それはPerlで正規表現のための素晴らしいページです。それは初心者から上級者まですべてを網羅しています。 –

+0

複数行の文字列とアンカーを処理する場合は、 'm'修飾子を追加することを忘れないでください。^、$ –

6

グローバルマッチング「g」修飾子はリストコンテキストでキャプチャマッチのリストを返します。

say $_ for $str =~ /un($wanted)/g; # Prints only $wanted 
0

@Zahid:私はあなたのアプローチは、よりコンパクトであると思います。 perlretutをrecommandingため

date, name, lang 
関連する問題