[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Learning Ruby

Urzahil

10/31/2006 10:51:00 AM

Hi, I come from a little bit of C programming, an I've just started
learning Ruby. So forgive me for the stupid question.
Following the user guide, I found a regular expression example
(rexg.rb), that doesn't work for me.
If I try to find an exact pattern everything is fine: for example,
searching "foo" in "foobar" returns the correct result. But searching a
regexp pattern doesn't: "fo+" doesn't find anything in "foobar".
I'm running Ruby 1.8 under Linux.
Thank you in advance for your help,

Cristiano

5 Answers

Peter Szinek

10/31/2006 11:01:00 AM

0

Urzahil wrote:
> Hi, I come from a little bit of C programming, an I've just started
> learning Ruby. So forgive me for the stupid question.
> Following the user guide, I found a regular expression example
> (rexg.rb), that doesn't work for me.
> If I try to find an exact pattern everything is fine: for example,
> searching "foo" in "foobar" returns the correct result. But searching a
> regexp pattern doesn't: "fo+" doesn't find anything in "foobar".
> I'm running Ruby 1.8 under Linux.
> Thank you in advance for your help,

Could you provide the examples you have tried? I did not really get you,
as for me:

irb(main):003:0> "foobar" =~ /foo/
=> 0
irb(main):004:0> "foobar" =~ /fo+/
=> 0

your example works. Please send the code snippets which did not work for
you.

Peter
http://www.rubyra...

Urzahil

10/31/2006 11:07:00 AM

0

Hi,

On Tue, 2006-10-31 at 20:00 +0900, Peter Szinek wrote:
>
> Could you provide the examples you have tried? I did not really get you,
> as for me:
>
> irb(main):003:0> "foobar" =~ /foo/
> => 0
> irb(main):004:0> "foobar" =~ /fo+/
> => 0
> your example works. Please send the code snippets which did not work for
> you.

I did not explain me too well.
This code works for me too. I was referring to the User Guide example.
Here is the code that doesn't work for me:

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"

Thanks again,
Cristiano


Vincent Fourmond

10/31/2006 11:37:00 AM

0

Cristiano Marchettini wrote:
> Hi,
>
> On Tue, 2006-10-31 at 20:00 +0900, Peter Szinek wrote:
>> Could you provide the examples you have tried? I did not really get you,
>> as for me:
>>
>> irb(main):003:0> "foobar" =~ /foo/
>> => 0
>> irb(main):004:0> "foobar" =~ /fo+/
>> => 0
>> your example works. Please send the code snippets which did not work for
>> you.
>
> I did not explain me too well.
> This code works for me too. I was referring to the User Guide example.
> Here is the code that doesn't work for me:
>
> 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}"

Normal: this code is doing simple string lookup, as in this line, re
is a String and not a Regexp. You should try this instead:

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

Vince

--
Vincent Fourmond, PhD student
http://vincent.fourmon...

Michael Fellinger

10/31/2006 1:06:00 PM

0

On 10/31/06, Cristiano Marchettini <Cristiano.Marchettini@gmail.com> wrote:
> Hi,
>
> On Tue, 2006-10-31 at 20:00 +0900, Peter Szinek wrote:
> >
> > Could you provide the examples you have tried? I did not really get you,
> > as for me:
> >
> > irb(main):003:0> "foobar" =~ /foo/
> > => 0
> > irb(main):004:0> "foobar" =~ /fo+/
> > => 0
> > your example works. Please send the code snippets which did not work for
> > you.
>
> I did not explain me too well.
> This code works for me too. I was referring to the User Guide example.
> Here is the code that doesn't work for me:
>
> 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"
>
> Thanks again,
> Cristiano

Not directly answering your question, but since you are still learning ruby:

########## LOTSA CODE #########
st = "\033[7m"
en = "\033[m"

$stdout.sync = true

loop do
print "string> "
string = gets.chomp
print "pattern> "
pattern = gets.chomp

puts string.gsub pattern, "#{st}\\&#{en}"
end
######## LOTSA CODE END ########

i think that would be a more 'rubylike' way to write it... also making
your intention a bit clearer :)
you are not in C anymore, you can loosen your grip a little ;)

^manveru

Bernard Kenik

11/1/2006 8:12:00 PM

0


----- Original Message -----
From: "Peter Szinek" <peter@rubyrailways.com>
To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
Sent: Tuesday, October 31, 2006 6:00 AM
Subject: Re: Learning Ruby


> Urzahil wrote:
>> Hi, I come from a little bit of C programming, an I've just started
>> learning Ruby. So forgive me for the stupid question.
>> Following the user guide, I found a regular expression example
>> (rexg.rb), that doesn't work for me.
>> If I try to find an exact pattern everything is fine: for example,
>> searching "foo" in "foobar" returns the correct result. But searching a
>> regexp pattern doesn't: "fo+" doesn't find anything in "foobar".
>> I'm running Ruby 1.8 under Linux.
>> Thank you in advance for your help,
>
> Could you provide the examples you have tried? I did not really get you,
> as for me:
>
> irb(main):003:0> "foobar" =~ /foo/
> => 0
> irb(main):004:0> "foobar" =~ /fo+/
> => 0
>
> your example works. Please send the code snippets which did not work for
> you.
>
the 0 indicates that a match was found at offset 0

"foobar" =~ /oo/
=> 1

"foobar" =~ /boo/
=> nil

In ruby, 0 or empty string is not "false", only nil or false are false
anything else is true

> Peter
> http://www.rubyra...
>
>