!!!{{category 改造FAQ}}検索処理でエラーになる !!原因 一つの可能性として正規表現のパターンが不適切である可能性があります。 例えば、文字コードがShift-JISでは以下のような場合にエラーとなります。 例1. 「表」を検索しようとして以下のようにした場合 $target = '対象'; $pattern = '表\'; # 「表」の末尾は「\」なので「\」を付加してエスケープしている if($target =~ /$pattern/){} # ここでエラー 例2. 「[」を検索しようとして以下のようにした場合 $target = '対象'; $pattern = '['; if($target =~ /$pattern/){} # ここでエラー 例1.は「表」の末尾が「\」であるため、パターンを閉じる右側の「/」がエスケープされてしまい閉じられないせいです。 例2.は「[」が正規表現のメタ文字であるため、無効な正規表現となっているせいです。 !!解決策 これを防ぐためにはパターンを「\Q」と「\E」で囲むか、quotemeta関数でエスケープ処理を施すようにします。 例a. 「\Q」と「\E」で囲む場合 $target = '対象'; $pattern = '表\'; if($target =~ /\Q$pattern\E/){} # メタ文字の無効化 例b. quotemeta関数でエスケープする場合 $target = '対象'; $pattern = '表\'; $pattern = quotemeta($pattern); # メタ文字のエスケープ if($target =~ /$pattern/){} !!推奨 SOS2では正規表現が多用されていますが、この件のような問題と負荷的な面から、正規表現を用いたほうが記述量を大幅に少なくできる場合以外はindex関数で検索したほうが良いかと思います。 例A. index関数を使用する場合 $target = '対象'; $pattern = '表\'; if(index($target, $pattern) != -1){} # index関数を使用 ----