Regex problem with gsub

Hi,

i have a dir like that and need the
first part of the first filename =

J:\test>dir /B
20070921_0001.xml
20070921_0002.xml
20070921_0003.xml

i tried with =

str=File.basename(Dir[“J:/test/*.xml”].sort[0]).gsub(/(\w{8}).+/, $1)

but =
TypeError: can’t convert nil into String
from (irb):4:in `gsub’
from (irb):4
from :0

if i use =
irb(main):005:0> str=File.basename(Dir[“J:/test/*.xml”].sort[0])
=> “20070921_0001.xml”
i get the filename

how to change my gsub part to make it work, i want
the first part of the filename, i.e.
filename “20070921_0001.xml”
i want “20070921”

Regards, Gilbert

Gilbert R. wrote:

str=File.basename(Dir[“J:/test/*.xml”].sort[0]).gsub(/(\w{8}).+/, $1)

At this point $1 is nil, which is why you get the error. You have to
keep in
mind that arguments are evaluated before the method is called and $1
will
only have value after that. You need to use ‘\1’ instead of $1.

HTH,
Sebastian

Hi,

Sebastian H. wrote:

Gilbert R. wrote:

str=File.basename(Dir[“J:/test/*.xml”].sort[0]).gsub(/(\w{8}).+/, $1)

At this point $1 is nil, which is why you get the error. You have to keep in
mind that arguments are evaluated before the method is called and $1 will
only have value after that. You need to use ‘\1’ instead of $1.

Thanks!!
Works now. I’m still not sure, when to use \1 and when to use $1

Regards, Gilbert

Hi Gilbert:

The problem it’s not the regex, it’s the second parameter, try instead:

string.gsub(/(\w{7}).+/, ‘\1’)

This supposing you want ever the first seven chars, if you want the
characters before because they can be variable, try this regex:

string.gsub(/(\w*)(_.)..+/, ‘\1’)

I’m not mastered the regular expressions, any corrections appreciated.

Regards,

Jovino

-----Mensaje original-----
De: Gilbert R. [mailto:[email protected]]
Enviado el: sábado, 22 de septiembre de 2007 11:55
Para: ruby-talk ML
Asunto: regex problem with gsub

Hi,

i have a dir like that and need the
first part of the first filename =

J:\test>dir /B
20070921_0001.xml
20070921_0002.xml
20070921_0003.xml

i tried with =

str=File.basename(Dir[“J:/test/*.xml”].sort[0]).gsub(/(\w{8}).+/, $1)

but =
TypeError: can’t convert nil into String
from (irb):4:in `gsub’
from (irb):4
from :0

if i use =
irb(main):005:0> str=File.basename(Dir[“J:/test/*.xml”].sort[0])
=> “20070921_0001.xml”
i get the filename

how to change my gsub part to make it work, i want
the first part of the filename, i.e.
filename “20070921_0001.xml”
i want “20070921”

Regards, Gilbert