• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl cgiで正規表現が無限にマッチする)

perl cgiで正規表現が無限にマッチする

このQ&Aのポイント
  • perlでcgiを作っています。フォームから受け取ったテキストから、正規表現を用いて、データを切り出そうと思っています。
  • 以下のようなコードを書くと、マッチするのは一か所だけのはずなのに、無限回数マッチしてprintしつづけます。なにが間違っているのでしょうか。ご指導ください。
  • マッチするのは一か所だけのはずなのに、無限回数マッチしてprintしつづけます。なにが間違っているのでしょうか。ご指導ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6826/9707)
回答No.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をいじるのがまずければ、別の変数にコピーしてそれで処理をしましょう。

nagaon
質問者

お礼

極めて明快かつ迅速なご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう