[newbie] string pattern instead of regexp

Discussion in 'Ruby' started by Yvon Thoraval, Sep 21, 2003.

  1. 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
     
    Yvon Thoraval, Sep 21, 2003
    #1
    1. Advertising

  2. Yvon Thoraval

    ts Guest

    >>>>> "Y" == Yvon Thoraval <> 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
     
    ts, Sep 21, 2003
    #2
    1. Advertising

  3. Yvon Thoraval

    Luc Heinrich Guest

    Yvon Thoraval <> 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 -
     
    Luc Heinrich, Sep 21, 2003
    #3
  4. Luc Heinrich <> 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
     
    Yvon Thoraval, Sep 22, 2003
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Victor
    Replies:
    5
    Views:
    26,902
    chaser
    Jul 4, 2007
  2. matt neuburg
    Replies:
    2
    Views:
    93
    matt neuburg
    Oct 11, 2006
  3. Mikel Lindsaar
    Replies:
    0
    Views:
    491
    Mikel Lindsaar
    Mar 31, 2008
  4. Craig Jolicoeur
    Replies:
    9
    Views:
    149
    7stud --
    Apr 29, 2009
  5. Joao Silva
    Replies:
    16
    Views:
    365
    7stud --
    Aug 21, 2009
Loading...

Share This Page