Using a variable to build a regex

I need to search a roster file (plain text) to match for a player name.
I
tried this:

[email protected]:~/learning/ruby$ irb
irb(main):001:0> player=“S_Avrul”
=> “S_Avrul”
irb(main):002:0> player_line=“S_Avrul ger 25 R 1 2 3 7 40 35”
=> “S_Avrul ger 25 R 1 2 3 7 40 35”
irb(main):003:0> re=/player/
=> /player/
irb(main):004:0> re.match(player_line)
=> nil
irb(main):005:0>

How can I use the value of “player” to create the regex?

TIA Dave

Dave T. wrote:

irb(main):004:0> re.match(player_line)
=> nil
irb(main):005:0>

How can I use the value of “player” to create the regex?

TIA Dave

/#{player}/

On Dec 22, 8:18 pm, Dave T. [email protected] wrote:

How can I use the value of “player” to create the regex?

In a string literal, “player” would also be the actual string “player”
and not the value of that variable. Do you know how to substitute
inside a string? The same answer applies to Regexp literals in Ruby.

For a hint:
http://phrogz.net/ProgrammingRuby/language.html#substitutions

(In

Dave T. [email protected] wrote:

irb(main):004:0> re.match(player_line)
=> nil
irb(main):005:0>

How can I use the value of “player” to create the regex?

You can use #{} substitution in a Regexp, the same way you can in a
string. Thus re=/#{player}/. You can also use Regexp.new to construct
a regexp from a string. (So you can do ordinary string manipulations
to construct the regexp as a string, then turn that into a regexp.)

Both of these will treat any metacharacters in the string as
metacharacters (e.g. A “.” in the string will match any character). To
avoid this problem, use Regexp.escape.

–Ken

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs