シフトJISの2バイト文字を0に置き換えたいと思いました。

$sjifstr =~ tr/\x??-\x??/'0'/;

という部分の?が分かればこれは成功しますか?

これは2バイト文字を知るための勉強として
試していることです。
2バイト文字のことが分かるようになったら、
フォームから入力された文字列が7文字以上だった場合、
6文字目を…にして、日本語1文字を2文字として計算して
必ず6文字以内になるようにしたいと思っています。

abあいc → abあ…
あaいう → あい…
a亜bcい → a亜b…

のようにしたいと思っています。
それで、まず2バイト文字だけを取り出す方法を
教えてもらおうと思いました。

A 回答 (2件)

サンプル作ったげるから、あとは自分で研究してちょうだいな。



プログラム1
######################################

$strlen=10;
$line=<STDIN>;
chomp $line;
if (length $line>10) {
if (substr($line, $strlen-1, 2) =~ /([\x81-\x9f][\x40-\xfc])|([\xe0-\xfc][\x40-\xfc])$/) {
$line=substr($line, 0, $strlen-1);
} else {
$line=substr($line, 0, $strlen);
}
print $line."…";
} else {
print $line;
}

######################################


プログラム2
######################################
while(<>) {
$cnt =s/([\x81-\x9f][\x40-\xfc])|([\xe0-\xfc][\x40-\xfc])//g; # shift-jisの文字数
$cnt+=s/.//g; #半角の文字数
print $cnt;
}
######################################
    • good
    • 0
この回答へのお礼

ありがとうございます。
質問以外の
$cnt+=s/.//g; #半角の文字数
っていうのも勉強になりました。

前に教えてもらった
=~ ///o の o についてのソースなんでけど、
実際試してみたら全部ヒットしてしまいました。
分かりません。
でも、めったに使うことない o だと思うから
今はあんまり気にしていません。

お礼日時:2001/10/14 08:10

シフトJISの1バイト目はASCIIと区別がつくので良いですが、2バイト目はASCIIと区別がつかないので、文字列の先頭から1バイトずつ見ていかないと、どこがSJISの2バイト文字かを判定することはできないよーな気がします。


#2バイト組で見ていけばOKかもしれませんが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
substr($line, $strlen-1, 2)
というふうに2文字ずつなんですね。

お礼日時:2001/10/14 08:08

このQ&Aに関連する最新のQ&A

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


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ