masatoの日記

やっていきます

無限ループを避けてwhileで正規表現マッチを試みる

正規表現にマッチする文字列をすべて取りだそうとしてwhileループを試みたとき、無限ループになってハマった。

   while ( $text =~ /$regex{$maker}{item}/sm ) { #無限ループ
        print "match\n";
            $parsed{ $+{pos} }{item_name}    = $+{item_name} // '';
}

解決策はシンプルで、gオプションを付ければよかった。

   while ( $text =~ /$regex{$maker}{item}/gsm ) {
        print "match\n";
            $parsed{ $+{pos} }{item_name}    = $+{item_name} // '';
}