From: "しん" Date: 2007-10-05T20:08:33+09:00 Subject: [ruby-list:44082] Regexp.union([pattern, ...]) に騙されました 出沢@神奈川です 昨年、 [ruby-list:42454] 「 多量の正規表現との効率的なマッチのアイデアを」 といったSubjectで色々教えて頂きました。 その後 File.read.split(/\n).map{ } にはまってます。 そのなかで Regexp.union なるものに興味を持ったのですが、当時の仕事では 使わずじまい。今回それが役に立ちそうな仕事があって使ってみたのですが 騙されました。 Regexp.union([pattern, ...]) とあったので 引き数に pattern とすべき String の Array を入れたのですが怒られました。 [ ] はArrayではなく 省略可能引き数 だったのだ、、、 マニュアルでは Regexp.union("a", "?", "b") といった例がでていますが パターンとなるべき文字列をプログラム作成時に用意するのではなく 外部から たとえば file から読みこんで、と言うような場合、 引き数がこういう形しか許されないと使えないのではないでしょうか。 今回は幸い エスケープが必要なかったので Regexp.new(File.read(ARGV.shift).split(/\n/).join("|")) としてしまって過ごしましたが、エスケープが必要だとややこしそうです。 こういう場合に Regexp.union を上手に使うにはどうするのがお作法なのでしょうか。 怒られたのは Regexp.union(File.read(ARGV.shift).split(/\n/)) 怒られなかったけど、意図とまったく違ってしまったのが Regexp.union(File.read(ARGV.shift).split(/\n/).join(",")) これは 阿呆さ加減に笑ってしまいました。