« EUC の正規表現 | メイン | モスでは無線LANが使えない »
2005年05月17日
全角英数字 ⇔ 半角英数字
全角英数字を半角英数字に変換するときは、どのような方法を使っていますか?僕は jcode.pl をずっと使っていました。というか jcode.pl は、手放せないライブラリだったわけです。
&jcode::tr(\$text, '0-9A-Za-z', '0-9A-Za-z');
しかし、常々、正規表現で書くことは出来ないのかと考えていたわけです。書きました。
Perl メモ より
$a = qr{(?<!\x8F)}; $b = qr{(?=(?:[\xA1-\xFE][\xA1-\xFE])*(?:[\x00-\x7F\x8E\x8F]|\z))}x;
全角英数字 → 半角英数字
$text =~ s/$a\xA3([\xB0-\xB9\xC1-\xDA\xE1-\xFA])$b/pack("C", ord($1) - 0x80)/oeg;
半角英数字 → 全角英数字
$text =~ s/([0-9A-Za-z])/pack("C*", 0xA3, ord($1) + 0x80)/eg;
Perl で pack や ord を使う機会がほとんど無いけど、今回のために調べたり。というか、自分がコードを書くときに使ったのは、これがはじめて。
もっといい方法は無いかな。
【関連情報】
・Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm
2005年05月17日 22:26 | Programming
トラックバック
コメント
jcode.plだったら,z2h....
投稿者 takot : 2005年05月18日 16:41
>> takot さん
Σ(゚Д゚)ガーン モジュールやライブラリの説明はちゃんと読むべきですね。
投稿者 ceekz : 2005年05月18日 19:30
perl どうやって覚えたんですか?
投稿者 名無しさん@歯が痛い : 2005年05月19日 10:45
>> 名無しさん@歯が痛い さん
うーん。慣れかなぁ。かれこれ、6年くらいやってますんで。
構文は細かく覚えてないです。そのつど、リファレンスを見ながら。あと、記述スタイルが固まってきたのも最近です。
投稿者 ceekz : 2005年05月19日 13:30