• ベストアンサー

全角文字列から英数字のみ抜き出す方法は?

Perl 文字コード sjis 以下のように、全角文字列の中から、全角英数字のみを抜き出したいのですが、良い方法はありますでしょうか。 あア亜ABC-123 ↓ ABC-123 宜しくお願い致します。

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

  • ベストアンサー
回答No.1

いったんUTF-8に変換して、s///g置換で英文字以外を削除する方法が一番楽だと思います。 日本語処理するときは、いったんUTF-8に変換すると便利な場合が多々あります。 UTF-8の扱いについては、参考URLをどうぞ。 -------------------------------------------------- use Encode; # 検索対象の文字列をUTF-8に変換 my $str = 'あア亜ABC-123'; my $utf_str = Encode::decode('shift-jis', $str); # 置換に使う条件文字列をUTF-8に変換 $trstr = '0-9A-Za-z-'; # ここは自由に変更してください my $utf_trstr = Encode::decode('shift-jis', $trstr); # UTF-8同士ならそのまま置換できる。 # $utf_trstrの中身以外の文字を削除 $utf_str =~ s/[^$utf_trstr]//g; # 出力するときにshift-jisに戻す print Encode::encode('shift-jis',$utf_str);

参考URL:
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
abiru
質問者

お礼

うまくいきました。 ありがとうございます!

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

use encoding 'shiftjis'; $text="あア亜ABC-123"; $text =~ s/[^A-Za-z0-9!$&%@_?-]//g; print $text; #こんな感じで、英記号は適当に追加して下さい