CGI-BBS > CGI > Perl > 置換関数でのエラー


カレッヂ
カレッヂ


質問者 Takashi  投稿日 10/17(水) 13:35:54
置換関数(S)の置換対象文字列に"ー"(2バイトハイフン)を指定するとエラーになってしまいます。
例えばこんなプログラムです。 $message =~ s/メニュー//g;
この"ー"を置換対象にするにはどのようにすればいいのでしょうか?
どなたか教えて下さい。宜しくお願い致します。
回答者 しあわせのツボ  [削除]  投稿日 10/17(水) 14:31:36
"?"を1バイトずつに分解すると、2バイト目が"|"です。
これがメタ文字にあたるため、エラーを起こします。

$tmp = quotemeta("メニュ?");
$message =~ s/$tmp//g;
とすれば大丈夫だと思います。

# なぜ音引き"ー"でなくダーシ"?"を打つのかという疑問はさておき。
質問者 Takashi  [削除]  投稿日 10/17(水) 15:25:16
やってみます。ありがとうございます。
"メニュ"の後に打つのは"?"ではなく"ー"です。
回答者 呑兵衛  [削除]  投稿日 10/18(木) 00:51:05
> $tmp = quotemeta("メニュ?");

ですと
print $tmp;
\ソ―ニ\ソ?
あれっ、、、。

一つの方法ですが
$message =~ s/\Qメニュー\E//g;
でもOKです。
\Q と \E の間にあるメタ文字をクオートする、です。
回答者 しあわせのツボ  [削除]  投稿日 10/18(木) 01:56:13
−を打ったのですが、化けてますね。
「2バイトハイフン」こと「−」 と「音引き」こと「ー」 は別物ですので、あれっと思ったのですが、結局どちらですか?(どちらでもエラーにはなります)

ー−─一‐は全て別物なのですが、ごっちゃにしてよこすクライアントが多く、よく泣いてます。
質問者 Takashi  [削除]  投稿日 10/18(木) 09:40:50
音引きというのでしょうか?「メニュー」や、「メーカー」や、「ホームページ」などの単語に使う"ー"です。
回答者 vagabond  [削除]  投稿日 10/22(月) 00:34:34
こんな方法はどうでしょうか?
shift_jisでのーが問題みたいなので、euc_jpにjcodeなどでコード変換してから、
置換とか。

面倒ですけど。(笑)

返信(回答)する


Web裏技