# [ruby-list:19137] であげた String#{index,rindex} の動作について.現
# 状ではマルチバイト文字列中で先頭以外の場所からサーチさせると文字境界
# を正しく見ない.


In message <E11tvwS-0002aB-00 / ev.netlab.co.jp>
matz / netlab.co.jp writes:

> 一応、仕様です。正しいマッチのためにはstartposが文字境界であ
> ることを期待しているつもりです。マルチバイトならstartposをど
> うこうってのは、やってないと思うんですが。

まあ,これは regexp.c:re_search() をながめてたら ismbchar() でどうこ
う,っていうのを見付けただけなので.でも現状でも一番最後の文字について
はマルチバイト文字でもちゃんとマッチするように見えるので,ほかでもなん
とかするつもりだったのではと邪推したのです :-)


> |# 最後の文字だけでなく,どこでからであっても /./ は文字の先頭からマッ
> |# チして欲しい物である.
> 
> このニーズは分からないでもないです。が、どうすべきかについて
> はruby-devで話しましょう。マルチバイト中でもシングルバイトに
> もマッチできるというワケわかな現状の仕様がいかんというのもあ
> りえるでしょうし。

わたしの希望は一貫してうまい事良きに計らってくれる :-) ことです.「/./
でマッチさせたら必ず文字の先頭にマッチする」というのが典型例.

# 空白文字かマルチバイト文字の先頭にマッチしたらその場所を返してくれ
# る,っていうのが簡単に書けて良い,と.


「正規表現は文字を意識する」という方針からすると,index や rindex でも
ちゃんと動いて欲しいと思います.半端なマルチバイト文字の一部をどう扱う
か,というのをちゃんとする必要はあるでしょうが.

# といっても直観的に問題になりそうなケースっていうのが思い付かない....
# jcode.rb みたいにマルチバイト文字を '\xa0\xa2' なんてふうに書いた場
# 合ぐらい? 正規表現側で「文字」として認識できないんだから,バイト列と
# してマッチされてしまう.


-- 
柳川和久 @ 東大阪市 . 大阪府                               December 4, 1999
依存の終わり 依存への依存の終わり それは個の誕生