handle ^ and $ in BRE subexpression start and end as anchors
authorSzabolcs Nagy <nsz@port70.net>
Thu, 24 Nov 2016 00:44:49 +0000 (01:44 +0100)
committerRich Felker <dalias@aerifal.cx>
Sat, 17 Dec 2016 04:26:29 +0000 (23:26 -0500)
commit7a4c25d78030b3a43ed5c8dd1a456f73cb990f44
treee4855beab38f5f84fd4b5d35f88748bdae78b454
parentadfe682eb0d77c6afc751f5e407d9da39623c24e
handle ^ and $ in BRE subexpression start and end as anchors

In BRE, ^ is an anchor at the beginning of an expression, optionally
it may be an anchor at the beginning of a subexpression and must be
treated as a literal otherwise.

Previously musl treated ^ in subexpressions as literal, but at least
glibc and gnu sed treats it as an anchor and that's the more useful
behaviour: it can always be escaped to get back the literal meaning.

Same for $ at the end of a subexpression.

Portable BRE should not rely on this, but there are sed commands in
build scripts which do.

This changes the meaning of the BREs:

\(^a\)
\(a\|^b\)
\(a$\)
\(a$\|b\)
src/regex/regcomp.c