Interpolating a string into a regex

Same as string insertion.

if goo =~ /#{Regexp.quote(foo)}/
#...

Note that the Regexp.quote in Jon L.'s answer is important!

if goo =~ /#{Regexp.quote(foo)}/

If you just do the "obvious" version:

if goo =~ /#{foo}/

then the periods in your match text are treated as regexp wildcards, and "0.0.0.0" will match "0a0b0c0".

Note also that if you really just want to check for a substring match, you can simply do

if goo.include?(foo)

which doesn't require an additional quoting or worrying about special characters.


Probably Regexp.escape(foo) would be a starting point, but is there a good reason you can't use the more conventional expression-interpolation: "my stuff #{mysubstitutionvariable}"?

Also, you can just use !goo.match(foo).nil? with a literal string.

Tags:

Ruby

Regex