[#15357] Regexp literal and Regexp.new() — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

14 messages 2001/12/05
[#15358] Regexp in UTF-8 (Re: Regexp literal and Regexp.new()) — TAKAHASHI Masayoshi <maki@...> 2001/12/05

高橋征義です。むーん、問題のありかが違ったかも。

[#15435] Time#utcoff — Tanaka Akira <akr@...17n.org>

In article <hvosnahj702.fsf@coulee.a02.aist.go.jp>,

20 messages 2001/12/13
[#15436] Re: Time#utcoff — matz@... (Yukihiro Matsumoto) 2001/12/14

まつもと ゆきひろです

[#15505] ERb — m_seki@...

74 messages 2001/12/20
[#15560] Re: ERb — Tanaka Akira <akr@...17n.org> 2001/12/27

In article <20011220114249J.seki@mr.nasu.toshiba.co.jp>,

[#15879] Re: ERb — m_seki@... 2002/02/12

[#15884] Re: ERb — Tanaka Akira <akr@...17n.org> 2002/02/14

In article <m3eljr5o9m.wl@edwin.mva.biglobe.ne.jp>,

[#15885] Re: ERb — m_seki@... 2002/02/14

[#15886] Re: ERb — m_seki@... 2002/02/14

[#15887] Re: ERb — TAKAHASHI Masayoshi <maki@...> 2002/02/14

高橋征義です。

[#15888] Re: ERb — m_seki@... 2002/02/14

[#15896] Re: ERb — Tanaka Akira <akr@...17n.org> 2002/02/15

In article <20020215085405G.seki@mr.nasu.toshiba.co.jp>,

[#15898] Re: ERb — m_seki@... 2002/02/15

[#15900] Re: ERb — TADA Tadashi <sho@...> 2002/02/16

ただただしです。

[#15901] Re: ERb — m_seki@... 2002/02/16

[#15906] Re: ERb — matz@... (Yukihiro Matsumoto) 2002/02/17

まつもと ゆきひろです

[#15909] 1.6 の寿命 (Re: Re: ERb) — Koji Arai <JCA02266@...> 2002/02/17

新井です。

[#15507] fileutils (2) — Minero Aoki <aamine@...>

あおきです。

30 messages 2001/12/20
[#15512] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/20

高橋征義です。

[#15513] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/21

あおきです。

[#15515] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/21

高橋征義です。結論は最後に。

[#15516] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/21

あおきです。

[#15533] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/22

高橋征義です。

[#15536] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/24

あおきです。

[#15540] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/24

高橋征義です。

[#15545] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/24

あおきです。

[#15557] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/26

高橋征義です。

[#15567] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/27

あおきです。

[#15573] [patch] resolv.rb for win32 platform — Tietew <tietew-ml-ruby-dev@...>

Tietew です。

22 messages 2001/12/28

[ruby-dev:15368] Re: Regexp in UTF-8 (Re: Regexp literal and Regexp.new())

From: TAKAHASHI Masayoshi <maki@...>
Date: 2001-12-06 05:10:40 UTC
List: ruby-dev #15368
高橋征義です。

正規表現でのUTF-8問題ですが、リテラルの話に戻します。

UTF-8の正規表現リテラル中で、\x を使って文字を指定するのは、
「指定が間違ってる」ということのようですが、やっぱり何かの形
で8進または16進数をつかって文字を指定したい、ということはある
と思います(というか、あります)。

とはいえ、バイト単位で指定する、というのは、曲がりなりにも
「文字(codeunit, mbchar)」の概念を持つRubyのRegexpには馴染ま
ないかもしれない、という気もしてきました。
# でも、ちょっと迷ってます。

というわけで、Perl5.6.1のように \x{XXXX} という形でマルチバイト
な文字を指定できるようにする、というのはどうでしょう。これなら、
何バイトあっても大丈夫ですから。

……などと考えていたのですが、Perlの\x{XXXX}って、Unicode
というかUCSのcodepointを指定してるんですね……。つまり、
UTF-8でのバイト表現とは全然違うわけで。\x{XXXX}とかっていう
4桁の16進数が、UTF-8では6バイトになってしまう、と。むーん。
さりとて、これに合わせるような指定にすると、逆にEUCやShift_JISで
不幸になってしまいそうです。まあ、EUCやShift_JISではこういう
表記は禁止する、ベタで書け、という方向性もありですが(今までも
特に苦情はありませんでしたし)、それもちと切ない。

ちなみに、Pythonでは\uXXXXでU+XXXXのUnicode文字を指定するらしい
です(やっぱりベタでUTF-8のbyte sequenceを書いたりはしない)。
Javaもこうでしたっけ?  なお、UnicodeのTechnical Reportでは、
\uXXXXでUCS-2(BMP)を、\UXXXXXXXX でUCS-4を指定できる、とか
いうことが書いています(Perlのような書き方もアリ、という補足が
ついています)。


以上を踏まえて、Rubyの正規表現リテラルでマルチバイト文字を
表現するにはどうすればよいか考えてみました。以下、「XX」は
16進文字です。

a. /foobar/ を Regex.new("foobar")と近い形にする。つまり、
   \xXX で文字とは関係なく、1バイトの情報を表すことにする。
   マルチバイト文字を表現する場合には、\xXX\xXX\xXX などと
   いう形でバイト列を並べる。

b. Perl互換。つまり、\x{XXXX} でU+XXXXにあたるUnicode文字を
   指定する。Unicodeな正規表現(現状UTF-8のみ)以外では使え
   ない(エラー)?

c. 「\xはバイト列を指定・Unicode以外にもOK」+「Unicode文字の
   指定はPython/UTR互換」案。
   \x{XXXXXX} が1文字分のバイト表現を指定していることにする。
   (つまり、UCS-2のUnicode文字を指定する場合、UTF-8では
   最大6桁の16進数で指定することになる。)
   Unicodeのcodepointを指定する方法としては、\uXXXXとか
   \UXXXXXXXXみたいなものを別途用意する。\uと\UはUnicode
   な正規表現以外では使えない(エラー)?

d. 独自路線。「\xはバイト列を指定・Unicode以外にもOK」+
   「Unicode文字の指定はPerlとPython/UTRの折衷(?)」案。
   \x{XXXXXX} が1文字分のバイト表現を指定していることにする。
   Unicodeのcodepointを指定する方法としては、\u{XXXXXX}という
   表記法を別途用意する。\uはUnicodeな正規表現以外では
   使えない(エラー)?

b案で誰も困らないのであればそれでいいと思いますが、やっぱ
困りますよねえ。というわけでc案かな?  と思うのですが、
\uXXXXと\UXXXXXXXXを使い分けるのは何かと美しくないと思う
ので、d案も考えました。d案は独自仕様なのが気になりますが、
形としてはすっきりしていると思います。


追記: Ruby M17NのUTF-8文字列の中で、Unicode文字を指定するには
どうするか、っていう問題もありますね。

高橋征義 (TAKAHASHI Masayoshi)       Email:maki@inac.co.jp

In This Thread