Anchors
Outside a character class, in the default matching mode, the
circumflex character (^) is an assertion which
is true only if the current matching point is at the start of
the subject string. Inside a character class, circumflex (^)
has an entirely different meaning (see below).
Circumflex (^) need not be the first character
of the pattern if a number of alternatives are involved, but it
should be the first thing in each alternative in which it appears
if the pattern is ever to match that branch. If all possible
alternatives start with a circumflex (^), that is,
if the pattern is constrained to match only at the start of the subject,
it is said to be an "anchored" pattern. (There are also other
constructs that can cause a pattern to be anchored.)
A dollar character ($) is an assertion which is
true only if the current matching point is at the end of the subject
string, or immediately before a newline character that is the last
character in the string (by default). Dollar ($)
need not be the last character of the pattern if a number of
alternatives are involved, but it should be the last item in any branch
in which it appears. Dollar has no special meaning in a
character class.
The meaning of dollar can be changed so that it matches only
at the very end of the string, by setting the
PCRE_DOLLAR_ENDONLY
option at compile or matching time. This does not affect the \Z assertion.
The meanings of the circumflex and dollar characters are
changed if the
PCRE_MULTILINE option
is set. When this is the case, they match immediately after and
immediately before an internal "\n" character, respectively, in addition
to matching at the start and end of the subject string. For example, the
pattern /^abc$/ matches the subject string "def\nabc" in multiline mode,
but not otherwise. Consequently, patterns that are anchored in single
line mode because all branches start with "^" are not anchored in
multiline mode. The
PCRE_DOLLAR_ENDONLY
option is ignored if
PCRE_MULTILINE is
set.
Note that the sequences \A, \Z, and \z can be used to match
the start and end of the subject in both modes, and if all
branches of a pattern start with \A is it always anchored,
whether PCRE_MULTILINE
is set or not.