• ベストアンサー

半角の文字数を知るには・・・

文字数は、length関数を使えばいいのかと思っていたのですが、どうも、半角と全角では認識が違うようなんです、どう区別して文字を数えたらいいのでしょうか・・・ 半角の文字数をしるにはどうしたらいいでしょうか? Perl初心者なので、出来るだけわかりやすく教えて頂きたいです。お願いします。

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

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.3

文字の正規表現は下記のURLを参考にされてみてはどうでしょう ここによるとShift-Jisの2バイト文字の正規表現は[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC] これをもとに1バイトの文字数,2バイトの文字数を返す関数を考えてみると... sub kazoeru { #戻り値 (1バイト文字の数,2バイト文字の数) my($one, $two); while ($_[0] =~ /([\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])|./g) { if (defined $1) { # 2バイト文字を1個発見!! $two++; } else { # 違ったみたい..1バイト文字としてカウント $one++; } } return ($one, $two); } #Sample ($han, $zen) = kazoeru("abcあああ123"); print "han=$han zen=$zen\n"; # han=6 zen=3

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#Character
Chiaki---
質問者

お礼

お返事ありがとうございます。 悩んでた問題は解決することができました。 今後もよろしくお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#10667
noname#10667
回答No.2

半角1文字は1バイト。全角文字(日本語など)1文字 は、2バイトです。 perlでいう1文字は1バイト、半角文字1文字の事です。 例えば、abc は3文字、あいう は6文字(6バイト) となります。(abあ は4文字)。

Chiaki---
質問者

お礼

お返事ありがとうございます。 全角と半角ではバイト数がちがうのですね・・ 勉強になりました。ありがとうございました。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「半角の文字数を知る」というのがどういう意味かよくわからないんですが.... たとえば "abcAAXYZ1203ああ" という文字列に対して, いくつを返せばいいんでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A