2

Perl スクリプトでコンパイル済みの正規表現を実装しようとすると、一致に問題が発生します。プリコンパイルせずにスクリプトを動作させていますが、行にまたがるエクスプレスがあるときはいつでも、プリコンパイル時に一致が返されません。たとえば、次のようになります。

my $regex_partner = qr/<h1 id="PartnerName">(?<partner_name>.*?)<\/h1>/;
$content =~ $regex_partner;
$partner_name = $+{partner_name};

プリコンパイル時には問題なく動作しますが、次の点に注意してください。

my $regex_web =~ qr/Company Website:.*openWindow[(]'(?<website>http:\/\/.*?)'/s;
$content =~ $regex_web;
$website = $+{website};

何も返しませんが、プリコンパイル全体を取り出すと機能します。qr//s を使用すると、いつでも機能しないようです。

ヘルプ?

4

1 に答える 1

9

タイプミスがあります。

my $regex_web =~ qr/.../s;

それは次のようになります。

my $regex_web = qr/.../s;

前者は に対してパターンマッチを実行してい$regex_webます。後者はパターンを $regex_web に割り当てています。警告が表示されていた場合、「パターン マッチで初期化されていない値 $regex_web を使用しています」という警告が表示されます。

投稿のタイプミスでない限り?

于 2011-11-21T18:26:41.517 に答える