単一の文字列を解析して、同じ正規表現条件で同じ文字列から複数のデータチャンクを取得しようとしています。静的な1つのHTMLドキュメントを解析しています(非公開の理由により、HTMLパーサーを使用してジョブを実行することはできません)。次のような式があります。
$string =~ /\<img\ssrc\="(.*)"/;
1ドルの値を取得したいと考えています。しかし、1つの文字列には、このようなimgタグがたくさんあるので、返された配列(@ 1?)のようなものが必要ですか?
ジムの答えとして、/ g修飾子を使用します(リストコンテキストまたはループで)。
しかし、貪欲に注意してください、あなたは.*
必要以上に一致させる(そしてエスケープしない<=、それらは特別ではありません)。
while($string =~ /<img\s+src="(.*?)"/g ) {
...
}
@list = ($string =~ m/\<img\ssrc\="(.*)"/g);
g修飾子は、文字列内のすべての出現に一致します。リストコンテキストは、すべての一致を返します。 perlop のm //演算子を参照してください。
マッチの最後に必要なのは、グローバル修飾子/ gだけです。次に、一致するものがなくなるまでループします
my @matches;
while ($string =~ /\<img\ssrc\="(.*)"/g) {
Push(@matches, $1);
}
/ g修飾子と左側のリストコンテキストを使用します。
@result = $string =~ /\<img\ssrc\="(.*)"/g;