How do I use a variable in a regexp search string?

Hi All,

I dont know how to use a variable in a regex searchstring.
ruby seems to only handle hardcoded serachstring in
regex's. How do you do this. My code is below.

Also - how do you put a variable name in a
File.open("filename.txt") statement like this:
File.open(filevariable) where filevariable can
be set to anything? I could not find this in
the docs.

Thanks, --Joe
================ snip code ===============
#!/usr/bin/ruby

F = "filename.txt"
searchstring = ARGV[0]

print "searchstring is ", searchstring, "\n"

File.open("filename.txt").each { |line|
# this fails puts line if line =~ searchstring
# this fails puts line if line =~ /searchstring/
# this fails puts line if line =~ "searchstring"

#this works
# puts line
}

I dont know how to use a variable in a regex searchstring.
ruby seems to only handle hardcoded serachstring in
regex's. How do you do this. My code is below.

Does this help?

str = "abcdef"
searchstring = "cd"
p str =~ /#{searchstring}/

Harry

This should work, here is an image showing how to use it:
http://tinypic.com/r/b5pi7m/6

filename = 'source.txt'
to_find = Regexp.new ARGV[0]

puts "The Regexp is: #{to_find.inspect}"

File.open(filename).each do |line|
  if line =~ to_find
    puts "This line matches: #{line}"
    puts "This is what matches: #{line[to_find]}"
  end
end

···

On Fri, Jan 29, 2010 at 6:50 PM, joemac <joemacbusiness@gmail.com> wrote:

Hi All,

I dont know how to use a variable in a regex searchstring.
ruby seems to only handle hardcoded serachstring in
regex's. How do you do this. My code is below.

Also - how do you put a variable name in a
File.open("filename.txt") statement like this:
File.open(filevariable) where filevariable can
be set to anything? I could not find this in
the docs.

Thanks, --Joe
================ snip code ===============
#!/usr/bin/ruby

F = "filename.txt"
searchstring = ARGV[0]

print "searchstring is ", searchstring, "\n"

File.open("filename.txt").each { |line|
# this fails puts line if line =~ searchstring
# this fails puts line if line =~ /searchstring/
# this fails puts line if line =~ "searchstring"

#this works
# puts line
}

You may need to escape:

  p str =~ /#{Regexp.escape(searchstring)}/

···

On Jan 29, 10:38 pm, Harry Kakueki <list.p...@gmail.com> wrote:

> I dont know how to use a variable in a regex searchstring.
> ruby seems to only handle hardcoded serachstring in
> regex's. How do you do this. My code is below.

Does this help?

str = "abcdef"
searchstring = "cd"
p str =~ /#{searchstring}/

Josh Cheek wrote:

File.open(filename).each do |line|
  if line =~ to_find
    puts "This line matches: #{line}"
    puts "This is what matches: #{line[to_find]}"

or to avoid having to match it twice:

  puts "This is what matches: #{$&}"

Also:
  puts "This is what came before: #{$`}"
  puts "This is what came after: #{$'}"
  puts "Capture 1 is #{$1}"
  # etc

···

--
Posted via http://www.ruby-forum.com/.

Hi Folks,

Thanks for all the helpful info.
It was the #{} syntax that i was missing.
This also works for the "filename as a varible" situation
when parsing lots of files:

filenames = ["input1", "input2", "input3"]

for fname in filenames
   infile = File.open("#{fname}")
   while line = infile.gets()
      puts line
   end
   puts "================== end file ==================="
end

Very helpfull!

Thanks, --JM

···

On Jan 29, 7:38 pm, Harry Kakueki <list.p...@gmail.com> wrote:

> I dont know how to use avariablein a regex searchstring.
> ruby seems to only handle hardcoded serachstring in
> regex's. How do you do this. My code is below.

Does this help?

str = "abcdef"
searchstring = "cd"
p str =~ /#{searchstring}/

Harry

Thomas Sawyer wrote:

···

On Jan 29, 10:38�pm, Harry Kakueki <list.p...@gmail.com> wrote:

> I dont know how to use a variable in a regex searchstring.
> ruby seems to only handle hardcoded serachstring in
> regex's. � How do you do this. � My code is below.

Does this help?

str = "abcdef"
searchstring = "cd"
p str =~ /#{searchstring}/

You may need to escape:

  p str =~ /#{Regexp.escape(searchstring)}/

But note that #{} only makes sense if you're interpolating a variable
into part of a regex -- say, /January #{year}/. If the variable is the
whole regex, then it's more sensible to do Regex.new(searchstring).

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org
--
Posted via http://www.ruby-forum.com/.

In this case, you're already getting strings in fname so "#{fname}" isn't really doing anything useful.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Feb 22, 2010, at 1:45 PM, joemac wrote:

On Jan 29, 7:38 pm, Harry Kakueki <list.p...@gmail.com> wrote:

I dont know how to use avariablein a regex searchstring.
ruby seems to only handle hardcoded serachstring in
regex's. How do you do this. My code is below.

Does this help?

str = "abcdef"
searchstring = "cd"
p str =~ /#{searchstring}/

Harry

Hi Folks,

Thanks for all the helpful info.
It was the #{} syntax that i was missing.
This also works for the "filename as a varible" situation
when parsing lots of files:

filenames = ["input1", "input2", "input3"]

for fname in filenames
  infile = File.open("#{fname}")
  while line = infile.gets()
     puts line
  end
  puts "================== end file ==================="
end

Very helpfull!

Thanks, --JM