原です。


> まつもと ゆきひろです.

> まずsuccとuptoは表裏一体なので,動きを合わせたい(jcode.rbで
> uptoを書き換えるならsuccも書き換えたい)のが,主な理由です.

そういうことでしたか。

> さらにuptoはperlのstring increment magicに該当する処理を行っ
> ているので,もともとの原さんのuptoでは仕様を満足していません.

もちろんそうですね。私は succ と upto は、別々でいいんじゃな
いかと思っていたんで。


>|> |後、/./ は "\n" にマッチしないので、jtr の引数には出来ません。
> こいつはできるようになりました.新しいjcode.rbを後ろにつけて
> おきます.

なるほど、こうするのか。ここでは _expnad_ch は、モロに String#upto
を使うことを止めていますね。

ここでも "\n-A" の様な表現は - による展開はしてくれません。
こうすればどうかな。

  def grep_ch(item)
    len = self.length
    i = 0
    while i < len && j = (item === self[i..-1])
      yield $&
      i += j + $&.length
    end
  end
  
  def _expand_ch
    a = []
    grep_ch(/(.|\n)-(.|\n)|(.|\n)/) do |r|
      if r =~ /(.|\n)-(.|\n)/
        if $1.length != $2.length
          next
        elsif $1.length == 1
          $1[0].upto($2[0]) { |c| a.push c.chr }
        else
          $1.upto($2) { |c| a.push c }
        end
      else
        a.push r
      end
    end
    a
  end


> まずrubyはいつも複数行に対応しています.つまりいつでもmオプ
> ションを指定していることになりますね.

そうだったんですか。知らなかった。(^^;


> sオプションとかは悩ましいですねえ.

これは . で \n を排除するのを止めるだけでは?中身を知らずに
物を言ってますが。(^^;


> マッチの情報を配列で返せれば満足できますか?
> たとえば
> 
>  "a;b;c;" =~ /(.);(.);(.);/
>  array = $~.to_a
> 
> のような形で.gpickはちょっと違うもののようですけど.

なるほどこれでもいいですね。大域変数を使うのがちょっと気
になるけど。$~ って大域変数ですよね?そういえば $~ という
のはのぞいてみたことがありませんでした。これの正体は何で
しょう。謎めいてますね。


>|さらに「反復子」のある正規表現

> で,これは実現するにはString#grepが行単位でなく文字単位でマッ
> チすれば良いようにも思いますけど.どうなんでしょう? もとも
> とString#grepを行単位にする必然性はあまりないようですし.

String#grep が行単位でなくなるということは、each が行単位なの
で、grep が each から Enumerable モジュールで直接派生したもの
でなくなりますね。いいのかな。

試しに上の grep_ch を作ってみたんですが、やはり

"abc".grep_ch(/(.)/) { |x| print $1, "\n" }

としても $1 が有効にならないのでいまいちでした。


#ところで、今
#"abc" =~ /./; print $~, "\n"
#をしたら Segmentation fault を起こしました。(^^;