2012-03-29 9 views
17

次の正規表現を使用して、Webページ上の外部参照を行進しています。Rubyで動的正規表現を作成することは可能ですか?

\/static\/workout\/[A-Z]{1,4}032812[A-Z]{1,5}-EQB.html 

私は値が現在の日付を反映するように、正規表現の032812の部分を動的にする方法を見つけるしたいと思います。フォアの例では、2012年3月31日に正規表現は次のようになります。

\/static\/workout\/[A-Z]{1,4}033112[A-Z]{1,5}-EQB.html 

私は、文字列

a = \/static\/workout\/[A-Z]{1,4}033112[A-Z]{1,5}-EQB.html 

、その後

\ a \ 

が、これは動作しませんでしたを作成してみました。これを行う方法はありますか?

答えて

52

#{}は文字列のように使用できます。

1.9.2p290 :001 > some_string = "033112" 
=> "033112" 
1.9.2p290 :002 > a_regex = /[A-Z]{1,4}#{some_string}[A-Z]{1-5}-EQB.html/ 
=> /[A-Z]{1,4}033112[A-Z]{1-5}-EQB.html/ 
+0

感謝を!私はそれを理解していない自分自身を蹴っている。もう一度、ありがとうございます。 – Mutuelinvestor

+0

ruby​​ 2.2.0で動作しますか? – MC2DX

+1

@MateuszCzerwińskiこれはRuby 2.2で動作しますが、変数に正規表現文字が含まれている場合は注意が必要です。 '#{Regexp.quote(some_string)}'を '/.../'で使用することを検討してください。 – TWiStErRob

12

も私は完全にアイザックのソリューションをサポートしていますが、次のことができます。

a = "\/static\/workout\/[A-Z]{1,4}" + "033112" + "[A-Z]{1,5}-EQB.html" 
regex = Regexp.new(a) 
stringtomatch =~ regex 
+0

それでは、b = Regexp.new(a)のようになり、/ b /とマッチを実行します。 – Mutuelinvestor

+0

私は自分の答えを編集します。 Isaacの答えを正しい光に当てるのにも役立ちます。 –

+3

それに加えて、正規表現の '/'は文字列の '' 'と考えるのが有益です:正規表現があれば、それを適用する* apply * it正規表現がリテラルやその他の正規表現を生成するかどうかにはまったく関心がない別個のプロセスです。したがって、文字列を取り、それを正規表現に変換して適用するには、スラッシュを使用する必要はありません。その上に 'to_s'を呼び出し、その文字列を印字する際には引用符を必要としません。上の例は単なる想像上のリテラルなので、まったく別のパスです。 –

関連する問題