« 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