• ベストアンサー

シフトJIS 2バイト字の範囲

シフトJISの2バイト文字の範囲は 0x40~0x7e と 0x80~0xfc と 0x40~0xfc のどっちですか? どちらの情報も見たことがあるんです。 シフトJISの文字をマッチングさせる場合、 ここでは見やすく、スペースを入れて / [\x81-\x9f] [\x40-\xfc] | [\xe0-\xfc] [\x40-\xfc] / とした場合、例えば、亜a という文字列があったら 亜 の2バイト目(下位ニブルっていうのかな)が 9F で b は16進で 62 だから、亜 の2バイト目と a が、 2バイトのシフトJISとしてこれにマッチしてしまうんです。 シフトJISで、こういう例外処理を書かずに、 全てに適用できるシフトJIS2バイトマッチのソースが あれば教えてください。

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

  • ベストアンサー
  • kazu-kun
  • ベストアンサー率31% (72/232)
回答No.1

「0x40~0x7e と 0x80~0xfc」だと思いますよ。 「亜a」に対してマッチングするのではなく、前から2バイトずつマッチングして、マッチしたら2バイト進み、マッチしなかったら1バイト進むというようにしないとダメでは? 0x7fの例外処理?を除くことはできないですよね。

参考URL:
http://www.sowa.is.uec.ac.jp/~ueno/material/kanji/sjis.html
A__
質問者

お礼

文字列先頭から見ていく というのは思いつきませんでした。 ありがとうございます。

その他の回答 (1)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

シフトJISの2バイト目のコードは、 0x40~0x7E 及び 0x80~0xFC です。 0x7Fは含みません。 で、2バイトシフトJISにマッチさせるなら、 /([\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])/ と書けばOKなはずです。 […]という文字集合を使用しているのだから、2パターンに分ける必要はないですよ。

A__
質問者

お礼

パターンをパイプを使わずに書く方法は勉強になりました。 ありがとうございます。