原です。 > まつもと ゆきひろです. > まず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 を起こしました。(^^;