Variable substitution in a regex

Yeah, straightforward enough, moreover you can process
an array of vars as in the snippet I put up on
Rubyforge:

# function to regexp vars
def is_element_in_string?(in_string, in_array)
in_array.each do |line|
rx_test = /#{line}/
            if in_string =~ rx_test
                             return true
            end
end
return false
end

# as an example we may wish to see whether a list of
football match results
# contains a result of a team we are interested in
varray = Array.new
# now populate the array with reegxps you wish to
match...
varray = ["Plymouth Argyle", "Blackburn Rovers" ,
"Manchester .*", "Tott.*"]

#Examples:
results = "Plymouth Argyle 5 - Cardiff 0"
puts is_element_in_string?(results, varray)
#=> true

results = "Watford 3 - Sunderland 0"
puts is_element_in_string?(results, varray)
#=> false, no match

results = "Man City 2 - Man Utd 0"
puts is_element_in_string?(results, varray)
#=> false
# since it obviously won't regexp unless we add "Man
U.*" to our array...
# e.g.
varray.push("Man U.*")
puts is_element_in_string?(results, varray)
# => true

···

--- Scott Pack <softwarespack@yahoo.com> wrote:

Hi,

I am new to Ruby. Can I substitute the value of a
variable into a regular expression? For example:

exp = /(\d+)/ #works
exp = /(\d+)/ + 'some string value' #Not!

Thanks,

S

__________________________________
Yahoo! Mail Mobile
Take Yahoo! Mail with you! Check email on your
mobile phone.
http://mobile.yahoo.com/learn/mail

__________________________________
Do you Yahoo!?
Yahoo! Small Business - Try our new resources site!

Hi --

Yeah, straightforward enough, moreover you can process
an array of vars as in the snippet I put up on
Rubyforge:

# function to regexp vars
def is_element_in_string?(in_string, in_array)
in_array.each do |line|
rx_test = /#{line}/
           if in_string =~ rx_test
                            return true
           end
end
return false
end

Let Ruby do the work for you :slight_smile:

   def is_element_in_string?(str, elements)
     elements.any? {|e| /#{e}/.match(str) }
   end

# as an example we may wish to see whether a list of
football match results
# contains a result of a team we are interested in
varray = Array.new
# now populate the array with reegxps you wish to
match...
varray = ["Plymouth Argyle", "Blackburn Rovers" ,
"Manchester .*", "Tott.*"]

You're not populating the array; you're discarding the array and
creating a completely new one :slight_smile: The array you created previously
ceases to exist.

You can either just leave out that first assignment, or if you have
some reason to create and populate the array in two steps, you could
do:

   varray = Array.new
   varray.replace(["Plymouth ...", "...", ...])

but I can't think of any reason to do that. I would just assign the
array to the variable, as in your second assignment.

David

···

On Wed, 18 May 2005, Steve Callaway wrote:

--
David A. Black
dblack@wobblini.net