- ベストアンサー
パターンマッチが、ひっかかりません。ActivePerl のバグでしょ
パターンマッチが、ひっかかりません。ActivePerl のバグでしょうか? $doc =~ m%<SCRIPT language=javascript type=text/javascript>(.+?)</SCRIPT>%; $1 に、何も入りません。 $doc は、複数行のデータです。(改行が、複数ある) 中身を検索すると、確かに、この文字列は、存在しています。 環境は、ActivePerl 5.12.1 Build 1201 です。 どなたか、助けてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>$doc は、複数行のデータです。(改行が、複数ある) 他の方の指摘の通りだと思いますが、ストレートに書いてないので、伝わってないかもしれませんね。 正規表現の . は、改行にはマッチしません。 お書きの正規表現だと、<SCRIPT>から</SCRIPT>までが同一行の時だけマッチします。 . を改行にもマッチさせたいときは、正規表現のオプションで s を指定します。 $doc =~ m%~~~%s;
その他の回答 (2)
- kirikirkaz
- ベストアンサー率60% (21/35)
$doc =~ m%<SCRIPT language=javascript type=text/javascript>(.+?)</SCRIPT>%s; としたらどうでしょう。 もしそれでもマッチしなければ正規表現が間違っている可能性があります。
お礼
ありがとうございます。うまくいきました。 修飾子'm'については、やってみていたのですが、's'については、文字列を単一行として扱うと、いうことなので、考えもしませんでした。今回は、複数行なので・・・ もう少し、深く意味を探らないと、いけませんね。
- g_p_
- ベストアンサー率53% (28/52)
こんにちは。 以下の様な感じでしょうか。 5.12は使ってみませんが、多分バグじゃないと思いますよ。 正規表現のオプションについて調べてみられたら良いと思います。 "バグ"という言葉を他人の製作物に対して使う時は、もう少し慎重に調べられてからの方が良いと個人的には思います。 #! perl5.10 use strict; my $str = << "_EOD_"; <script type="text/javascript"> // alert('test'); </script> _EOD_ print $1 if $str =~ /<script[^>]*>(.+?)<\/script>/ms;
お礼
ありがとうございます。 修飾子'm'については、やってみていたのですが、's'については、文字列を単一行として扱うと、いうことなので、考えもしませんでした。今回は、複数行なので・・・ もう少し、深く意味を探らないと、いけませんね。 ところで、'ms'は、相反するものでは、ないですか?
お礼
ありがとうございます。 修飾子'm'については、やってみていたのですが、's'については、文字列を単一行として扱うと、いうことなので、考えもしませんでした。今回は、複数行なので・・・ もう少し、深く意味を探らないと、いけませんね。