Reading Peter Cooper's book; about regular expressions

Discussion in 'Ruby' started by Kaye Ng, Aug 30, 2010.

  1. Kaye Ng

    Kaye Ng Guest

    x = <<MY_DELIMITER
    We like Ruby
    They adore Ruby
    Everyone loves Ruby
    MY_DELIMITER

    #changes the first line only (from 'We'to 'Do you')
    puts x.sub(/^../, 'Do you')

    puts

    #ALSO changes the first line only, but anchors at the end of the line
    (from 'Ruby' to 'Rubic')
    puts x.sub(/.$/, 'ic')

    --------------------------------------------------------------------------------
    So what does the author mean by "beginning of any lines" in page 45,
    third paragraph of his book?

    "The ^ is an anchor, meaning the regular expression
    will match from the beginning of any lines within the string."

    I'm also having a bit of trouble using the syntax \A and \Z. Can
    anybody show how it's done please?

    Thank you very much.
    Peter Cooper Rocks!
    --
    Posted via http://www.ruby-forum.com/.
     
    Kaye Ng, Aug 30, 2010
    #1
    1. Advertising

  2. Kaye Ng

    Bob Proulx Guest

    Kaye Ng wrote:
    > x = <<MY_DELIMITER
    > We like Ruby
    > They adore Ruby
    > Everyone loves Ruby
    > MY_DELIMITER
    > ...
    > So what does the author mean by "beginning of any lines" in page 45,
    > third paragraph of his book?
    >
    > "The ^ is an anchor, meaning the regular expression
    > will match from the beginning of any lines within the string."


    The ^ anchors the regular expression to the beginning of the line. In
    the above example there are three lines. You can see where they are
    by this example which replaces the "nothing" at the beginning of every
    line with an 'X' character.

    puts x.gsub(/^/, 'X')
    XWe like Ruby
    XThey adore Ruby
    XEveryone loves Ruby

    The location of the 'X's mark the beginning of the lines.

    More rigoriously a line begins at the beginning or after any newline
    character.

    > I'm also having a bit of trouble using the syntax \A and \Z. Can
    > anybody show how it's done please?


    The \A matches only at the beginning of the string. This ignores
    embedded newlines.

    puts x.gsub(/\A/, 'X')
    XWe like Ruby
    They adore Ruby
    Everyone loves Ruby

    The \Z matches only at the end of the string, or before a newline at
    the end. This is unfortunately inconsistent because it will match
    twice at the end if there is a newline at the end.

    puts x.gsub(/\Z/, 'X')
    We like Ruby
    They adore Ruby
    Everyone loves RubyX
    X

    This is unfortunate but compatible with PCRE (perl compatible regular
    expression). If the ending newline is stripped off then this matches
    only at the end.

    puts x.strip.gsub(/\Z/, 'X')
    We like Ruby
    They adore Ruby
    Everyone loves RubyX

    Bob
     
    Bob Proulx, Aug 30, 2010
    #2
    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. Jay Douglas
    Replies:
    0
    Views:
    609
    Jay Douglas
    Aug 15, 2003
  2. Fred Smith
    Replies:
    1
    Views:
    946
    Martin Honnen
    Feb 5, 2004
  3. braskor
    Replies:
    0
    Views:
    429
    braskor
    Sep 24, 2008
  4. Replies:
    0
    Views:
    318
  5. Noman Shapiro
    Replies:
    0
    Views:
    234
    Noman Shapiro
    Jul 17, 2013
Loading...

Share This Page