[#7785] rb2c — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

28 messages 1999/09/02

[#7845] [Q] irb and SizedQueue — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

14 messages 1999/09/15

[ruby-dev:7890] regular expression in SJIS

From: "Osame Ken'ichiro" <plonk@...>
Date: 1999-09-21 07:41:19 UTC
List: ruby-dev #7890
はじめまして、納といいます。

"山崎" -> "山!ED95!" のように、SJISの機種依存文字と拡張文字を取り除こうと、
#  ↑拡張文字の"崎"

buf = buf.gsub(/#{"[\xed\x40-\xfc\x4b\x87\x40-\x87\x9c]"}/s) do |c|
	one = c[0]
	two = c[1]
	sprintf("!%X%X!", one.to_i, two.to_i)
end

のようなコードを書いたのですが、ver 1.4.1 からおかしな動作をするように
なってしまいました。
具体的には、SJISの文字境界にまたがって、マッチしてしまいます。

1.4.0 と 1.4.1 の regex.c を見くらべて、 re_compile_fastmap()の

            while (beg <= end) {
              /* NOTE: Charset for multi-byte chars might contain
                 single-byte chars.  We must reject them. */
              if (beg < 0x100)
                fastmap[beg] = 2; ← ここ
              else if (ismbchar(beg))
                fastmap[beg] = 1;
              beg++;
            }

の数字を適当(例えば1)に書換えるとなぜか期待通りに動きました。

御役にたてれば幸いです。
では。
-- 
Osame Ken'ichiro
plonk@munakata.ne.jp , plonk@reo.to , plonk@csnet.ne.jp
ICQ#: 21549876

In This Thread

Prev Next