# Reading Peter Cooper's book; about regular expressions

**URL:** <https://www.ruby-forum.com/t/reading-peter-coopers-book-about-regular-expressions/194090>\
**Category:** Ruby\
**Created:** [August 30, 2010, 6:35am UTC](https://www.ruby-forum.com/t/reading-peter-coopers-book-about-regular-expressions/194090 "2010-08-30T06:35:19Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![marlon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/8c91f0/32.png) [@marlon](https://www.ruby-forum.com/u/marlon)\
**Post date:** [August 30, 2010, 6:35am UTC](https://www.ruby-forum.com/t/reading-peter-coopers-book-about-regular-expressions/194090/1 "2010-08-30T06:35:19Z")

</div>

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 C. Rocks!

---

<div class="post-metadata">

**Author:** ![marlon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/8c91f0/32.png) [@marlon](https://www.ruby-forum.com/u/marlon)\
**Post date:** [August 30, 2010, 7:31am UTC](https://www.ruby-forum.com/t/reading-peter-coopers-book-about-regular-expressions/194090/2 "2010-08-30T07:31:37Z")

</div>

Kaye Ng wrote:

> 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
