3

変数として保存する必要がある単純な Perl 正規表現があります。

私がそれを印刷した場合:

print($html_data  =~ m/<iframe id="pdfDocument" src=.(.*)pdf/g);

保存したいものを出力しますが、保存しようとすると:

$link = $html_data =~ m/<iframe id="pdfDocument" src=.(.*)pdf/g;

の値として「1」を返します$link。これは、「1」の一致が見つかったためだと思います。しかし、代わりに試合の内容を保存するにはどうすればよいですか?

4

4 に答える 4

7

すべての一致を取得するには、/g に注意してください。それらをスカラーに入れることはおそらくできません。配列が必要です。

my @links = $html_data =~ m/<iframe id="pdfDocument" src=.(.*)pdf/g;

最初の一致だけが必要な場合:

my ($link) = $html_data =~ m/<iframe id="pdfDocument" src=.(.*)pdf/;

括弧に注意してください (そして、今では役に立たない /g がないことに注意してください)。リストコンテキストで m// を呼び出す必要があります。

于 2012-04-11T20:19:27.127 に答える
4

パターンの一致した部分式は、変数$1$2などに保存されます。一致したパターン全体を取得することもできます ( $&) が、これはコストがかかるため、避ける必要があります。

ちなみに、ここでの動作の違いは、スカラー コンテキストとリスト コンテキストの結果です。それらがどのように異なり、さまざまな Perl 式の動作にどのように影響するかを理解する必要があります。

于 2012-04-11T20:17:46.123 に答える
0

「perlfunc」ドキュメントから:

print LIST
文字列または文字列のリストを出力します。

したがって、print m//m// は、必要な戻り値
(wantarray?) がリストであることを決定します
(キャプチャ グループなしで m// を指定すると、1 または 0 の一致の成功
または失敗が返されますが、m//g は一致のリストを返します)。 .

$link= m// は、(リストではなく) スカラー コンテキストにしかできません。
したがって、m// は一致結果 1 (真) または 0 (偽) を返します。

于 2012-04-11T23:02:55.047 に答える