• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リストデータの検索でのエラー表示について教えてください。)

リストデータの検索でのエラー表示について教えてください

このQ&Aのポイント
  • 検索チェックボックスの配列データから全て一致するデータを取り出すコードでエラーメッセージが表示されました。
  • エラーメッセージには「/シャワー/: unmatched [] in regexp.」という内容が含まれています。
  • どこが問題なのかが分からず、解決方法を教えてください。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

これは $setubi_o[$i] に入っている文字列の文字コードが、シフトJISであるために起こる問題です。 シャワーの「ー」という字のシフトJISコードは 0x81 0x5B です。 2バイト目の 0x5B は「 [ 」という文字で、これは正規表現のメタ文字でもあります。 このため [ に対する ] がないとして、エラーが起きてしまうのです。 これを回避するためには、   if($setubi=~ /$setubi_o[$i]/ ){・・・ の行を、   my $tmp = quotemeta($setubi_o[$i]);   if($setubi=~ /$tmp/ ){・・・ のように、quotemeta関数を通した値でマッチさせるようにしてください。 ※quotemeta は、文字列中のメタ文字をエスケープ(前に \ を付ける)して返す関数です。 ちなみに、同じような効果を持つ \Q~\E を使って   if($setubi=~ /\Q$setubi_o[$i]\E/ ){・・・ として回避する方法もありますが、他の文字で問題が起こる可能性があるので、利用しない方がよいです。

ctpsys
質問者

お礼

leaz024 さん 大変助かりました。 また、ご親切な解説に感謝します。 ありがとうございました。

関連するQ&A