[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

[newbie] string pattern instead of regexp

yvon.thoravallist

9/21/2003 3:34:00 PM

I'm doing some experiment using the "rubyguide" giving this script :

#!/usr/bin/ruby
# regex.rb
# Requires an ANSI terminal!

st = "\033[7m"
en = "\033[m"

while TRUE
print "str> "
STDOUT.flush
str = gets
break if not str
str.chop!
print "pat> "
STDOUT.flush
re = gets
break if not re
re.chop!
str.gsub! re, "#{st}\\&#{en}"
print str, "\n"
end

print "\n"


when trying it i get the following warning :

pp:~/Applications/Ruby/Tutorial> ruby regex.rb
str> foobar
pat> ^fo+
regex.rb:19: warning: string pattern instead of regexp; metacharacters
no longer effective
foobar
str> abc012dbcd555
pat> \d
regex.rb:19: warning: string pattern instead of regexp; metacharacters
no longer effective
abc012dbcd555


does that means my term isn't an ANSI one or the syntax as changed ?
tuto is mostly from v 1.4 and i'm using v1.8 under MacOS X.2.6
--
Yvon
3 Answers

ts

9/21/2003 3:56:00 PM

0

>>>>> "Y" == Yvon Thoraval <yvon.thoravallist@-SUPPRIMEZ-free.fr.invalid> writes:

Y> regex.rb:19: warning: string pattern instead of regexp; metacharacters
Y> no longer effective

Well, the message say that ruby will not interpret metacharacter (this is
a change in 1.8). Create a Regexp object from the String

Y> re.chop!

re = Regexp.new(re.chomp)

Y> str.gsub! re, "#{st}\\&#{en}"
Y> print str, "\n"
Y> end



Guy Decoux

lucsky

9/21/2003 4:58:00 PM

0

Yvon Thoraval <yvon.thoravallist@-SUPPRIMEZ-free.fr.invalid> wrote:

> does that means my term isn''t an ANSI one or the syntax as changed ?
> tuto is mostly from v 1.4 and i''m using v1.8 under MacOS X.2.6

As far as I know, this warning was added some times ago (in 1.7.x ?)
after a slight semantic change, to make sure users would know about it.
Before, a single character string would be treated as a string, and all
others would be converted to regexp.

The behavior is now that strings will be strings, and regexp will be
regexp. I expected this warning to go away in 1.8 but looking at ruby
code (string.c) it looks like it will go away in 1.8.1.

So in short, your gsub won''t work like you expect here because you pass
it a string when you actually want a regexp.

Replace:

str.gsub! re, "#{st}\\&#{en}"

by:

str.gsub! Regexp.compile(re), "#{st}\\&#{en}"

or

str.gsub! /#{re}/, "#{st}\\&#{en}"

--
Luc Heinrich - lucsky@mac.com

yvon.thoravallist

9/22/2003 6:27:00 AM

0

Luc Heinrich <lucsky@mac.com> wrote:

> > does that means my term isn''t an ANSI one or the syntax as changed ?
> > tuto is mostly from v 1.4 and i''m using v1.8 under MacOS X.2.6
>
> As far as I know, [...]
> So in short, your gsub won''t work like you expect here because you pass
> it a string when you actually want a regexp.
>
> Replace:
>
> str.gsub! re, "#{st}\\&#{en}"
>
> by: [...]
>
> str.gsub! /#{re}/, "#{st}\\&#{en}"

it''s what i''ve suspected, works fine now, tanxs !
--
Yvon