大島様、みなさま

坂野 正明と申します。

At Wed, 12 Oct 2005 23:33:08 +0900,
osamu ohshima <ohshima / po.harenet.ne.jp> 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:"]


以上、ご参考までに。

坂野 正明