プロが教えるわが家の防犯対策術!

文字数は、length関数を使えばいいのかと思っていたのですが、どうも、半角と全角では認識が違うようなんです、どう区別して文字を数えたらいいのでしょうか・・・

半角の文字数をしるにはどうしたらいいでしょうか?

Perl初心者なので、出来るだけわかりやすく教えて頂きたいです。お願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
悩んでた問題は解決することができました。

今後もよろしくお願いします。

お礼日時:2004/11/26 20:46

半角1文字は1バイト。

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

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

勉強になりました。ありがとうございました。

お礼日時:2004/11/26 20:44

「半角の文字数を知る」というのがどういう意味かよくわからないんですが....



たとえば "abcAAXYZ1203ああ" という文字列に対して, いくつを返せばいいんでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!