• ベストアンサー

全角・半角が混じったテキストをバラバラにして配列に入れたい

perl5.8.5でCGIのプログラムを作っています。 全角・半角が混じったテキストを一文字ずつバラバラにして配列に入れたいと思っています。 プログラムの文字コードはEUCで書いています。 いろいろな方法が浮かぶのですがなるべくシンプルに書きたいと思っています。どのような方法がありますでしょうか。 教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

EUC コードは、1バイト目を見れば文字の種類がわかるようになっています。 ASCII文字 0x20 - 0x7E 漢字 0xA1A1 - 0xFEFE 補助漢字 0x8FA1A1 - 0x8FFEFE 次のような感じで、1文字ずつに分解できると思います。 @char = $str =~ /([\x20-\x7E]|[\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])/g; 誤解しそうであまりよい書き方ではありませんが、短くすることもできます。 @char = $str =~ /([\x20-\x7E]|[\xA1-\xFE].|\x8F..)/g;

chachachar
質問者

お礼

配列に入れるときにこういう書き方があるんですね。 ありがとうございます。 substrを使って一文字づつ引っ張ってきて配列に入れようとしていました。勉強になります。

その他の回答 (2)

  • TYWalker
  • ベストアンサー率42% (281/661)
回答No.3

use encoding プラグマを使って陽に文字コードを指定すると普通に split で半角、全角に関わらず文字単位で分解されます。 use encoding "EUC-JP"; @split = split //, "hankakuと全角が混ざっている"; # 配列 @split の中を見てください

chachachar
質問者

お礼

えっ、こんなに単純なという感じなんですね、勉強になります。 ありがとうございます。

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

私はSJISで仕事をすることが多いのですが、CPANの ShiftJIS::Stringを使っています。 私だったら、NKFでSJISにしてから、このモジュールを使います。 以下はワンライナーです。 C:\>perl -MShiftJIS::String=strsplit -le "print join('●', strsplit('', '文字コードはEUCで'))" 文●字●コ●ー●ド●は●E●U●C●で

参考URL:
http://search.cpan.org/~sadahiro/ShiftJIS-String-1.04/
chachachar
質問者

お礼

ありがとうございます。

関連するQ&A