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.
Regexp.compile(Regexp.escape(foo))
Use Regexp.new:
if goo =~ Regexp.new(foo) # Evaluates to /0.0.0.0/
Here's a limited but useful other answer:
I discovered I that I can easily insert into a regex without using Regexp.quote or Regexp.escape if I just used single quotes on my input string: (an IP address match)
IP_REGEX = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
my_str = "192.0.89.234 blahblah text 1.2, 1.4" # get the first ssh key
# replace the ip, for demonstration
my_str.gsub!(/#{IP_REGEX}/,"192.0.2.0")
puts my_str # "192.0.2.0 blahblah text 1.2, 1.4"
single quotes only interpret \\ and \'.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
This helped me when i needed to use the same long portion of a regex several times. Not universal, but fits the question example, I believe.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With