- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl cgiで正規表現が無限にマッチする)
perl cgiで正規表現が無限にマッチする
このQ&Aのポイント
- perlでcgiを作っています。フォームから受け取ったテキストから、正規表現を用いて、データを切り出そうと思っています。
- 以下のようなコードを書くと、マッチするのは一か所だけのはずなのに、無限回数マッチしてprintしつづけます。なにが間違っているのでしょうか。ご指導ください。
- マッチするのは一か所だけのはずなのに、無限回数マッチしてprintしつづけます。なにが間違っているのでしょうか。ご指導ください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
whileの条件式が偽にならなければ、ループは終了しません。 でもお書きのプログラムだと、$textの内容は変化しません。 つまり、ループしている部分を取り出すと、 while($text) { # $textを何もいじらない } ということなのですから、ループが開始されたら、止まりません…。 while ( $text =~ /Line(\d{1}):長さ:(\S+) km/){ print "Line$1: $2<br>"; $text =~ s/Line(\d{1}):長さ:(\S+) km//; # マッチした部分を削除 } 例えばこのようにすれば、$textはだんだん短くなり、最後にはマッチしなくなってループから抜けるでしょう。 $textをいじるのがまずければ、別の変数にコピーしてそれで処理をしましょう。
お礼
極めて明快かつ迅速なご回答ありがとうございました。