[yanq = yet another newbie question] correct syntax fovariable and regexp

i have a regex like :

rex = Regexp.new("^(.*)\s+Bourgogne[\\s*|\\s+(.*)]")

but i want to change the string "Bourgogne" to the third arg of the
script (needle = ARGV[2].to_s)

what is the correct syntax in order to replace "Bourgogne" by that
variable ?

Also, i do have a test :

if line =~ /^(.*)\s+Bourgogne\s*(.*)/

using rex is the correct syntax :

if line =~ rex

???

···

--
yt

I am not sure exactly what you are asking, so I will offer multiple
suggestions and you can see what works best for you:

line.gsub!(/Bourgogne/,needle)

changes all occurrences

line.sub!(/Bourgogne/,needle)

changes the first occurrence (if any), as does

line[/Bourgogne/] = needle

or if you want to keep the original string you can write (note, no "!"):

new_line = line.sub(/Bourgogne/,needle)

or maybe you would rather:

rex = Regexp.new("^(.*)Bourgogne(.*)")
if line =~ rex
    line = $1 + needle + $2
    end

Hope this helps.

-- Markus

···

On Mon, 2004-10-04 at 23:39, Yvon Thoraval wrote:

i have a regex like :

rex = Regexp.new("^(.*)\s+Bourgogne[\\s*|\\s+(.*)]")

but i want to change the string "Bourgogne" to the third arg of the
script (needle = ARGV[2].to_s)

what is the correct syntax in order to replace "Bourgogne" by that
variable ?

Also, i do have a test :

if line =~ /^(.*)\s+Bourgogne\s*(.*)/

using rex is the correct syntax :

if line =~ rex

???

Thanks for your answer, i need to clarify...

I want, from a given file, output to a new file the lines containing a
word (the example was "Bourgogne") given as the third arg of the script.

Notice i'm able to do that in a "static" way that's to say changing the
word in the script's regexp, what i don't know is the correct syntax to
replace this word by a variable in the regexp, the variable being a
String (ARGV[2].to_s).

···

Markus <markus@reality.com> wrote:

I am not sure exactly what you are asking, so I will offer multiple
suggestions and you can see what works best for you:

--
yt

"Yvon Thoraval" <yvon.thoravalNO-SPAM@free.fr> schrieb im Newsbeitrag
news:1gl6f5h.1hzh8w1ct4lg5N%yvon.thoravalNO-SPAM@free.fr...

> I am not sure exactly what you are asking, so I will offer multiple
> suggestions and you can see what works best for you:
Thanks for your answer, i need to clarify...

I want, from a given file, output to a new file the lines containing a
word (the example was "Bourgogne") given as the third arg of the script.

Notice i'm able to do that in a "static" way that's to say changing the
word in the script's regexp, what i don't know is the correct syntax to
replace this word by a variable in the regexp, the variable being a
String (ARGV[2].to_s).
--
yt

needle = ARGV[2]
rx = %r{^(.*)\s+#{needle}[\\s*|\\s+(.*)]}

If you want to be sure that meta symbols in needle are not interpreted you
can do this:

rx = %r{^(.*)\s+#{Regexp.escape needle}[\\s*|\\s+(.*)]}

What strikes me odd is the rest of your regexp, especially the square
brackets. If you just want to match a certain word as word in the line
you should probably use these ones:

rx = %r{\b#{needle}\b}
rx = %r{\b#{Regexp.escape needle}\b}

"\b" matches a word boundary.

Kind regards

    robert

···

Markus <markus@reality.com> wrote:

thanks for all, crystall clear to me °;)
(i had forgotten the magic of "\b")

and works great !!!

···

Robert Klemme <bob.news@gmx.net> wrote:

needle = ARGV[2]
rx = %r{^(.*)\s+#{needle}[\\s*|\\s+(.*)]}

If you want to be sure that meta symbols in needle are not interpreted you
can do this:

rx = %r{^(.*)\s+#{Regexp.escape needle}[\\s*|\\s+(.*)]}

What strikes me odd is the rest of your regexp, especially the square
brackets.
If you just want to match a certain word as word in the line
you should probably use these ones:

rx = %r{\b#{needle}\b}
rx = %r{\b#{Regexp.escape needle}\b}

"\b" matches a word boundary.

--
yt