From: matz@... (Yukihiro Matsumoto) Date: 1997-12-16T11:02:05+09:00 Subject: [ruby-dev:1103] Re: Regexp#operators (Re: ruby 1.1b1 released) まつもと ゆきひろです In message "[ruby-dev:1097] Re: Regexp#operators (Re: ruby 1.1b1 released)" on 97/12/15, Shin-ichiro HARA writes: |毎回言う事が違って恐縮です。やっぱり最初の通り、 | |/foo/ + /bar/ = /(?:foo)(?:bar)/ | |/foo/ | /bar/ = /foo|bar/ | |とし、 | |/foo/ & /bar/ = /(?=foo)bar/ | |~ /foo/ = /(?:(?!foo).)*/ | |も付け加えると。一応これでどうでしょう? うーん,実は演算子 ~ には RE =~ $_ の省略系と言う定義が既に あるんですね.もっとも条件式では自動的に $_ とのマッチが取ら れますし,あまり使われていないだろうことは間違いないので,変 更は可だと思いますけどね. |ちなみにこの場合、string =~ /foo/ & /bar/ は、 |string =~ /foo/ && string =~ /bar/ と結構異なります。 これを実現するためのeregex.rbというのを書いてみました.どう 思います? -- class RegOr def initialize(re1, re2) @re1 = re1 @re2 = re2 end def =~ (str) @re1 =~ str or @re2 =~ str end end class RegAnd def initialize(re1, re2) @re1 = re1 @re2 = re2 end def =~ (str) @re1 =~ str and @re2 =~ str end end class Regexp def |(other) RegOr.new(self, other) end def &(other) RegAnd.new(self, other) end end p "abc" =~ /b/|/c/ p "abc" =~ /b/&/c/