- ベストアンサー
全角文字列から英数字のみ抜き出す方法は?
Perl 文字コード sjis 以下のように、全角文字列の中から、全角英数字のみを抜き出したいのですが、良い方法はありますでしょうか。 あア亜ABC-123 ↓ ABC-123 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
いったん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);
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
use encoding 'shiftjis'; $text="あア亜ABC-123"; $text =~ s/[^A-Za-z0-9!$&%@_?-]//g; print $text; #こんな感じで、英記号は適当に追加して下さい
お礼
うまくいきました。 ありがとうございます!