Learning Ruby

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

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.rubyrailways.com

Hi,

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

···

On Tue, 2006-10-31 at 20:00 +0900, Peter Szinek wrote:

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

···

----- 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

Peter
http://www.rubyrailways.com

Cristiano Marchettini wrote:

Hi,

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

···

On Tue, 2006-10-31 at 20:00 +0900, Peter Szinek wrote:

--
Vincent Fourmond, PhD student
http://vincent.fourmond.neuf.fr/

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 :slight_smile:
you are not in C anymore, you can loosen your grip a little :wink:

^manveru

···

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