From: matz@... (Yukihiro Matsumoto) Date: 1997-12-10T18:21:43+09:00 Subject: [ruby-dev:1034] Re: Regexp#operators (Re: ruby 1.1b1 released) まつもと ゆきひろです In message "[ruby-dev:1033] Re: Regexp#operators (Re: ruby 1.1b1 released)" on 97/12/10, Shin-ichiro HARA writes: |原です。 |確かに。(^^; 本来はコンパイル後のオブジェクト(?)自身の演算 |が出来れば理想的だけどいくらなんでもそれは無理なんでしょうね。 いやあ,regex.cの内部構造にべったりでそういうコードを書くこ とは不可能ではないでしょうけど,将来別のregexルーチンに乗り 換えたい気持もあるので,それは避けたいですねえ. # pcre(Perl Compatible Regular Expression)っていうPerl5互換 # のライブラリがあるんだけど,だれか日本語化しない? |なるほど。まあでも | |a = "foo"; b = "bar" |c = /(?:#{a})|(?:#{b})/ | |とか、いちいち括弧をつけたりするのって結構面倒だと思うので、今回 |の演算子は結構便利だと思います。 まあ,まったく無駄ではないでしょうね. |積(&)は共通部分です。例えば /^[a-d]$/ & /^[b-e]$/ = /^[b-d]$/ |かな。しかし /[a-d]/ & /[b-e]/ がどうあるべきかは良く分からない |です。 むむむ,簡単に定義できそうにないですね.文字列レベルで正規表 現が簡単に定義できない場合私の手に余りますねえ. |まあ、そんな数学の先生みたいな事を言ってもしょうがない。(^^; 爆笑 |ある程度便利に使える演算子ならいいんで、さっきは (?=) と (?!) |を使った例をあげたのです。 これで妥協できるんなら,そんなに難しくないんですが,なんか積 や商という言葉(あるいは演算子)か想像できない動作のような気が…. |あ、やっぱりそいうのは可能なんですね。 Rubyでは可能でないような気がします.いや,まったく別のオブジェ クトにすれば良いのか. class RegOr def initialize(left, right) @left = left @right = right end def =~(str) @right =~ str or @left =~ str end end class Regexp def |(other) RegOr.new(self, other) end end /foo/|/bar/ =~ str これだとRuby流(左辺が正規表現)しか使えませんので,まだいろい ろ(String#=~を置き換えたり)しないといけないかも知れませんが. Iconの場合は言語の条件判定のモデルそのものが違うので,あんま り可能だといわないと思います. まつもと ゆきひろ /:|)