- ベストアンサー
全角・半角が混じったテキストをバラバラにして配列に入れたい
perl5.8.5でCGIのプログラムを作っています。 全角・半角が混じったテキストを一文字ずつバラバラにして配列に入れたいと思っています。 プログラムの文字コードはEUCで書いています。 いろいろな方法が浮かぶのですがなるべくシンプルに書きたいと思っています。どのような方法がありますでしょうか。 教えてください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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;
その他の回答 (2)
- TYWalker
- ベストアンサー率42% (281/661)
use encoding プラグマを使って陽に文字コードを指定すると普通に split で半角、全角に関わらず文字単位で分解されます。 use encoding "EUC-JP"; @split = split //, "hankakuと全角が混ざっている"; # 配列 @split の中を見てください
お礼
えっ、こんなに単純なという感じなんですね、勉強になります。 ありがとうございます。
- guci-ok
- ベストアンサー率33% (49/146)
私はSJISで仕事をすることが多いのですが、CPANの ShiftJIS::Stringを使っています。 私だったら、NKFでSJISにしてから、このモジュールを使います。 以下はワンライナーです。 C:\>perl -MShiftJIS::String=strsplit -le "print join('●', strsplit('', '文字コードはEUCで'))" 文●字●コ●ー●ド●は●E●U●C●で
お礼
ありがとうございます。
お礼
配列に入れるときにこういう書き方があるんですね。 ありがとうございます。 substrを使って一文字づつ引っ張ってきて配列に入れようとしていました。勉強になります。