Reading Peter Cooper's book; about regular expressions

K

Kaye Ng

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

Bob Proulx

Kaye said:
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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top