カレッヂ |
質問者 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裏技 |