Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > How do I use a variable in a regexp search string?

Reply
Thread Tools

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

 
 
joemac
Guest
Posts: n/a
 
      01-30-2010
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
}
 
Reply With Quote
 
 
 
 
Harry Kakueki
Guest
Posts: n/a
 
      01-30-2010
>
> I dont know how to use a variable in a regex searchstring.
> ruby seems to only handle hardcoded serachstring in
> regex's. =A0 How do you do this. =A0 My code is below.
>


Does this help?

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


Harry

 
Reply With Quote
 
 
 
 
Intransition
Guest
Posts: n/a
 
      01-30-2010


On Jan 29, 10:38=A0pm, 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. =A0 How do you do this. =A0 My code is below.

>
> Does this help?
>
> str =3D "abcdef"
> searchstring =3D "cd"
> p str =3D~ /#{searchstring}/


You may need to escape:

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


 
Reply With Quote
 
Marnen Laibow-Koser
Guest
Posts: n/a
 
      01-30-2010
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

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

 
Reply With Quote
 
Josh Cheek
Guest
Posts: n/a
 
      01-30-2010
[Note: parts of this message were removed to make it a legal post.]

On Fri, Jan 29, 2010 at 6:50 PM, joemac <> 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
> }
>
>

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

 
Reply With Quote
 
Brian Candler
Guest
Posts: n/a
 
      01-30-2010
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/.

 
Reply With Quote
 
joemac
Guest
Posts: n/a
 
      02-22-2010
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
 
Reply With Quote
 
Rob Biedenharn
Guest
Posts: n/a
 
      02-22-2010
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


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

-Rob

Rob Biedenharn http://agileconsultingllc.com





 
Reply With Quote
 
Jean-Julien Fleck
Guest
Posts: n/a
 
      02-22-2010
> In this case, you're already getting strings in fname so "#{fname}" isn't
> really doing anything useful.


Which means File.open(fname) would work directly.

Cheers,

--=20
JJ Fleck
PCSI1 Lyc=E9e Kl=E9ber

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
[regexp] How to convert string "/regexp/i" to /regexp/i - ? Joao Silva Ruby 16 08-21-2009 05:52 PM
| SEO , Search Engine Optimizer, SEARCH OPtiMIzAtIoN with SeaRch OPtiMizer optimizer.seo@gmail.com Digital Photography 0 04-22-2007 04:20 AM
search within a search within a search - looking for better way...my script times out Abby Lee ASP General 5 08-02-2004 04:01 PM
String search vs regexp search Anand Pillai Python 10 10-15-2003 08:21 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57