- ベストアンサー
SJISに関する少々複雑な問題
Perl で、下記のようなプログラムを組みました。 $original =~ s/\x83[\x80-\x96]/$Tbl{$&}/eg; このとき連想配列のキーには、"\x83\x80" ~ "\x83\x96" に該当するSJISの文字が入っています。 つまり、この範囲の全角文字を、別の文字に変換する正規表現です。 ところが(^_^; このソースだと問題があって、"麻雀" という文字をこの正規表現にかけると、おかしくなります。 "麻雀" の文字コード "\x96\x83""\x90\x9d" のうち、「麻のテイルと雀のヘッド」の2文字がこの範囲チェックに引っかかってしまい、結果、本来は変換されてほしくない文字である "麻雀" は、"夢・"("\x96\xb2\x9d") という変な文字に変換されてしまうんです。 "\x83\x90" という全角文字が "\xb2" という半角文字に置き換わる構造になっているからです。 前方から1文字ずつ見ていけばいいんですが、動作速度のカラミもあって、正規表現の使用はやめたくありません。 どうにか、正規表現だけでこの問題を回避する方法はないでしょうか。
- みんなの回答 (2)
- 専門家の回答
お礼
ありがとうございます。 正規表現にももう慣れたつもりでしたが、まだまだ俺の知らない記述法があるもんですね(^_^; 研究してみます。 それと、e がついてたのは馬鹿バグでした(^^;゜。