From: Masaaki Sakano Date: 2005-10-13T05:35:19+09:00 Subject: [ruby-list:41277] Re: #grepのパターンに変数を使う方法 大島様、みなさま 坂野 正明と申します。 At Wed, 12 Oct 2005 23:33:08 +0900, osamu ohshima wrote: > 岩月さんの > > pat = "usb 2-1.3" > > str.grep(/#{pat}/) > がまさに求めていた方法でした。これで解決しました。 この場合だと、たとえば、"usb 2-1@3" などにもマッチしてしまい ますが、これは意図されていない挙動かも、と推測します……。 公式としては、 Regexp.quote を当てはめるところだと思います。 http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Regexp#Regexp.2eescape pat1 = "usb 2-1.3" "usb 2-1@3:".grep(/#{pat1}/) => ["usb 2-1@3:"] "usb 2-1@3:".grep(/#{Regexp.quote(pat1)}/) => [] "usb 2-1.3:".grep(/#{Regexp.quote(pat1)}/) => ["usb 2-1.3:"] あるいは、 pat2 = Regexp.quote("usb 2-1.3") "usb 2-1@3:".grep(/#{pat2}/) => [] "usb 2-1.3:".grep(/#{pat2}/) => ["usb 2-1.3:"] ただ、上のように、文字列をほぼそのまま正規表現にしてしまうだけなら、 最初から外部で正規表現を定義した方がすっきりするかも知れませんね。 patrex = /usb 2-1\.3/ "usb 2-1@3:".grep(patrex) => [] "usb 2-1.3:".grep(patrex) => ["usb 2-1.3:"] 以上、ご参考までに。 坂野 正明