Syntax of the builtin regular expression library
In the event that an RE could match more than one substring of a given string, the RE matches the one starting earliest in the string. If the RE could match more than one substring starting at that point, its choice is determined by its preference: either the longest substring, or the shortest.
Most atoms, and all constraints, have no preference.
A parenthesized RE has the same preference (possibly none) as the RE. A
quantified atom with quantifier {m} or {m}? has the same preference (possibly
none) as the atom itself. A quantified atom with other normal quantifiers
(including {m,n} with m equal to n) prefers longest match. A quantified
atom with other non-greedy quantifiers (including {m,n}? with m equal to
n) prefers shortest match. A branch has the same preference as the first
quantified atom in it which has a preference. An RE consisting of two or
more branches connected by the operator prefers longest match.
Subject to the constraints imposed by the rules for matching the whole RE, subexpressions also match the longest or shortest possible substrings, based on their preferences, with subexpressions starting earlier in the RE taking priority over ones starting later. Note that outer subexpressions thus take priority over their component subexpressions.
Note that the quantifiers {1,1} and {1,1}? can be used to force longest and shortest preference, respectively, on a subexpression or a whole RE.
Match lengths are measured in characters,
not collating elements. An empty string is considered longer than no match
at all. For example, bb* matches the three middle characters
of `abbbc', (weekwee)(night
knights)
matches all ten characters of `weeknights', when (.*).* is matched against
abc the parenthesized subexpression matches all three characters, and when
(a*)* is matched against bc both the whole RE and the parenthesized subexpression
match an empty string.
If case-independent matching is specified, the effect
is much as if all case distinctions had vanished from the alphabet. When
an alphabetic that exists in multiple cases appears as an ordinary character
outside a bracket expression, it is effectively transformed into a bracket
expression containing both cases, so that x becomes `'. When it appears
inside a bracket expression, all case counterparts of it are added to the
bracket expression, so that
becomes
and
becomes `
'.
If newline-sensitive
matching is specified, . and bracket expressions using ^ will never match
the newline character (so that matches will never cross newlines unless
the RE explicitly arranges it) and ^ and $ will match the empty string after
and before a newline respectively, in addition to matching at beginning
and end of string respectively. ARE A and
Z continue to match beginning
or end of string only.
If partial newline-sensitive matching is specified, this affects . and bracket expressions as with newline-sensitive matching, but not ^ and `$'.
If inverse partial newline-sensitive matching is specified, this affects ^ and $ as with newline-sensitive matching, but not . and bracket expressions. This isn't very useful but is provided for symmetry.
ymasuda 平成17年11月19日