Provided by: erlang-manpages_16.b.3-dfsg-1ubuntu2.2_all bug

NAME

       re - Perl like regular expressions for Erlang

DESCRIPTION

       This module contains regular expression matching functions for strings and binaries.

       The regular expression syntax and semantics resemble that of Perl.

       The  library's  matching  algorithms  are  currently  based  on the PCRE library, but not all of the PCRE
       library is interfaced and some parts of the library go beyond what PCRE offers. The sections of the  PCRE
       documentation which are relevant to this module are included here.

   Note:
       The  Erlang  literal syntax for strings uses the "\" (backslash) character as an escape code. You need to
       escape backslashes in literal strings, both in your code and in the shell, with an additional  backslash,
       i.e.: "\\".

DATA TYPES

       mp() = {re_pattern, term(), term(), term()}

              Opaque  datatype  containing a compiled regular expression. The mp() is guaranteed to be a tuple()
              having the atom 're_pattern' as its first element, to allow for matching in guards. The  arity  of
              the tuple() or the content of the other fields may change in future releases.

       nl_spec() = cr | crlf | lf | anycrlf | any

       compile_option() = unicode
                        | anchored
                        | caseless
                        | dollar_endonly
                        | dotall
                        | extended
                        | firstline
                        | multiline
                        | no_auto_capture
                        | dupnames
                        | ungreedy
                        | {newline, nl_spec()}
                        | bsr_anycrlf
                        | bsr_unicode

EXPORTS

       compile(Regexp) -> {ok, MP} | {error, ErrSpec}

              Types:

                 Regexp = iodata()
                 MP = mp()
                 ErrSpec =
                     {ErrString :: string(), Position :: integer() >= 0}

              The same as compile(Regexp,[])

       compile(Regexp, Options) -> {ok, MP} | {error, ErrSpec}

              Types:

                 Regexp = iodata() | unicode:charlist()
                 Options = [Option]
                 Option = compile_option()
                 MP = mp()
                 ErrSpec =
                     {ErrString :: string(), Position :: integer() >= 0}

              This  function  compiles  a  regular  expression  with the syntax described below into an internal
              format to be used later as a parameter to the run/2,3 functions.

              Compiling the regular expression before matching is useful if the same expression is to be used in
              matching  against  multiple  subjects  during the program's lifetime. Compiling once and executing
              many times is far more efficient than compiling each time one wants to match.

              When the unicode option is given, the regular expression  should  be  given  as  a  valid  Unicode
              charlist(), otherwise as any valid iodata().

              The options have the following meanings:

                unicode:
                  The  regular  expression is given as a Unicode charlist() and the resulting regular expression
                  code is to be run against a valid Unicode charlist() subject.

                anchored:
                  The pattern is forced to be "anchored", that is, it is constrained to match only at the  first
                  matching  point  in  the string that is being searched (the "subject string"). This effect can
                  also be achieved by appropriate constructs in the pattern itself.

                caseless:
                  Letters in the pattern match both upper and lower case letters. It is equivalent to Perl's  /i
                  option,  and  it  can  be  changed  within  a  pattern by a (?i) option setting. Uppercase and
                  lowercase letters are defined as in the ISO-8859-1 character set.

                dollar_endonly:
                  A dollar metacharacter in the pattern matches only at the end of the subject  string.  Without
                  this  option, a dollar also matches immediately before a newline at the end of the string (but
                  not before any other newlines). The dollar_endonly option is ignored if  multiline  is  given.
                  There is no equivalent option in Perl, and no way to set it within a pattern.

                dotall:
                  A  dot  in  the pattern matches all characters, including those that indicate newline. Without
                  it, a dot does not match when the current position is at a newline. This option is  equivalent
                  to  Perl's  /s  option,  and  it  can  be changed within a pattern by a (?s) option setting. A
                  negative class such as [^a] always matches newline characters, independent  of  this  option's
                  setting.

                extended:
                  Whitespace  data  characters  in  the  pattern  are  ignored  except  when escaped or inside a
                  character class. Whitespace does not  include  the  VT  character  (ASCII  11).  In  addition,
                  characters  between  an unescaped # outside a character class and the next newline, inclusive,
                  are also ignored. This is equivalent to Perl's /x option, and  it  can  be  changed  within  a
                  pattern  by  a  (?x)  option setting. This option makes it possible to include comments inside
                  complicated patterns. Note, however, that this applies only  to  data  characters.  Whitespace
                  characters  may  never  appear  within  special  character sequences in a pattern, for example
                  within the sequence (?( which introduces a conditional subpattern.

                firstline:
                  An unanchored pattern is required to match before or at  the  first  newline  in  the  subject
                  string, though the matched text may continue over the newline.

                multiline:
                  By  default, PCRE treats the subject string as consisting of a single line of characters (even
                  if it actually contains newlines). The "start of line" metacharacter (^) matches only  at  the
                  start  of the string, while the "end of line" metacharacter ($) matches only at the end of the
                  string, or before a terminating newline (unless dollar_endonly is given). This is the same  as
                  Perl.

                  When  multiline  is  given, the "start of line" and "end of line" constructs match immediately
                  following or immediately before internal newlines in the subject string, respectively, as well
                  as  at  the  very start and end. This is equivalent to Perl's /m option, and it can be changed
                  within a pattern by a (?m) option setting. If there are no newlines in a subject string, or no
                  occurrences of ^ or $ in a pattern, setting multiline has no effect.

                no_auto_capture:
                  Disables  the  use  of  numbered capturing parentheses in the pattern. Any opening parenthesis
                  that is not followed by ? behaves as if it were followed by ?: but named parentheses can still
                  be  used  for capturing (and they acquire numbers in the usual way). There is no equivalent of
                  this option in Perl.

                dupnames:
                  Names used to identify capturing subpatterns need not be  unique.  This  can  be  helpful  for
                  certain  types  of pattern when it is known that only one instance of the named subpattern can
                  ever be matched. There are more details of named subpatterns below

                ungreedy:
                  This option inverts the "greediness" of the  quantifiers  so  that  they  are  not  greedy  by
                  default,  but become greedy if followed by "?". It is not compatible with Perl. It can also be
                  set by a (?U) option setting within the pattern.

                {newline, NLSpec}:
                  Override the default definition of a newline in the subject string, which is LF (ASCII 10)  in
                  Erlang.

                  cr:
                    Newline is indicated by a single character CR (ASCII 13)

                  lf:
                    Newline is indicated by a single character LF (ASCII 10), the default

                  crlf:
                    Newline is indicated by the two-character CRLF (ASCII 13 followed by ASCII 10) sequence.

                  anycrlf:
                    Any of the three preceding sequences should be recognized.

                  any:
                    Any of the newline sequences above, plus the Unicode sequences VT (vertical tab, U+000B), FF
                    (formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS  (paragraph
                    separator, U+2029).

                bsr_anycrlf:
                  Specifies  specifically that \R is to match only the cr, lf or crlf sequences, not the Unicode
                  specific newline characters.

                bsr_unicode:
                  Specifies specifically that \R is to match all the Unicode newline characters (including  crlf
                  etc, the default).

       run(Subject, RE) -> {match, Captured} | nomatch

              Types:

                 Subject = iodata() | unicode:charlist()
                 RE = mp() | iodata()
                 Captured = [CaptureData]
                 CaptureData = {integer(), integer()}

              The same as run(Subject,RE,[]).

       run(Subject, RE, Options) -> {match, Captured} | match | nomatch

              Types:

                 Subject = iodata() | unicode:charlist()
                 RE = mp() | iodata() | unicode:charlist()
                 Options = [Option]
                 Option = anchored
                        | global
                        | notbol
                        | noteol
                        | notempty
                        | {offset, integer() >= 0}
                        | {newline, NLSpec :: nl_spec()}
                        | bsr_anycrlf
                        | bsr_unicode
                        | {capture, ValueSpec}
                        | {capture, ValueSpec, Type}
                        | CompileOpt
                 Type = index | list | binary
                 ValueSpec = all | all_but_first | first | none | ValueList
                 ValueList = [ValueID]
                 ValueID = integer() | string() | atom()
                 CompileOpt = compile_option()
                   See compile/2 above.
                 Captured = [CaptureData] | [[CaptureData]]
                 CaptureData = {integer(), integer()}
                             | ListConversionData
                             | binary()
                 ListConversionData = string()
                                    | {error, string(), binary()}
                                    | {incomplete, string(), binary()}

              Executes  a  regexp matching, returning match/{match, Captured} or nomatch. The regular expression
              can be given either as iodata() in which case it is automatically compiled  (as  by  re:compile/2)
              and executed, or as a pre-compiled mp() in which case it is executed against the subject directly.

              When  compilation  is involved, the exception badarg is thrown if a compilation error occurs. Call
              re:compile/2 to get information about the location of the error in the regular expression.

              If the regular expression is previously compiled, the option list can  only  contain  the  options
              anchored,  global,  notbol,  noteol,  notempty,  {offset,  integer()  >= 0}, {newline, NLSpec} and
              {capture, ValueSpec}/{capture, ValueSpec, Type}. Otherwise all options valid for the  re:compile/2
              function  are  allowed  as  well.  Options  allowed both for compilation and execution of a match,
              namely anchored and {newline, NLSpec}, will affect both the compilation and execution  if  present
              together with a non pre-compiled regular expression.

              If  the  regular expression was previously compiled with the option unicode, the Subject should be
              provided as a valid Unicode charlist(), otherwise any iodata() will do. If compilation is involved
              and  the  option  unicode is given, both the Subject and the regular expression should be given as
              valid Unicode charlists().

              The {capture, ValueSpec}/{capture, ValueSpec, Type} defines what to return from the function  upon
              successful matching. The capture tuple may contain both a value specification telling which of the
              captured substrings are to be returned, and a type specification, telling how captured  substrings
              are  to  be  returned  (as index tuples, lists or binaries). The capture option makes the function
              quite flexible and powerful. The different options are described in detail below.

              If the capture options describe that no substring capturing  at  all  is  to  be  done  ({capture,
              none}),  the  function  will  return the single atom match upon successful matching, otherwise the
              tuple {match, ValueList} is returned. Disabling capturing can be done either by specifying none or
              an empty list as ValueSpec.

              The options relevant for execution are:

                anchored:
                  Limits  re:run/3  to  matching  at the first matching position. If a pattern was compiled with
                  anchored, or turned out to be anchored by virtue of its contents, it cannot be made unanchored
                  at matching time, hence there is no unanchored option.

                global:
                  Implements  global  (repetitive)  search  (the  g  flag  in Perl). Each match is returned as a
                  separate list() containing the specific match as well as any matching  subexpressions  (or  as
                  specified by the capture option). The Captured part of the return value will hence be a list()
                  of list()s when this option is given.

                  The interaction of the global option with a regular expression which matches an  empty  string
                  surprises  some  users. When the global option is given, re:run/3 handles empty matches in the
                  same way as Perl: a zero-length match at any point will be retried with the options [anchored,
                  notempty]  as  well.  If that search gives a result of length > 0, the result is included. For
                  example:

                    re:run("cat","(|at)",[global]).

                  The following matching will be performed:

                  At offset 0:
                    The regexp (|at) will first match at the initial position of  the  string  cat,  giving  the
                    result  set  [{0,0},{0,0}]  (the  second  {0,0}  is  due  to the subexpression marked by the
                    parentheses). As the length of the match is 0, we don't advance to the next position yet.

                  At offset 0 with [anchored, notempty]:
                     The search is retried with the options [anchored, notempty] at  the  same  position,  which
                    does  not  give  any  interesting  result  of  longer  length, so the search position is now
                    advanced to the next character (a).

                  At offset 1:
                    This time, the search results in [{1,0},{1,0}], so this search will also  be  repeated  with
                    the extra options.

                  At offset 1 with [anchored, notempty]:
                    Now the ab alternative is found and the result will be [{1,2},{1,2}]. The result is added to
                    the list of results and the position in the search string is advanced two steps.

                  At offset 3:
                    The search now once again matches the empty string, giving [{3,0},{3,0}].

                  At offset 1 with [anchored, notempty]:
                    This will give no result of length > 0 and we are at the last position, so the global search
                    is complete.

                  The result of the call is:

                     {match,[[{0,0},{0,0}],[{1,0},{1,0}],[{1,2},{1,2}],[{3,0},{3,0}]]}

                notempty:
                  An  empty  string  is not considered to be a valid match if this option is given. If there are
                  alternatives in the pattern, they are tried. If all the alternatives match the  empty  string,
                  the entire match fails. For example, if the pattern

                    a?b?

                  is applied to a string not beginning with "a" or "b", it would normally match the empty string
                  at the start of the subject. With the notempty option, this match is not  valid,  so  re:run/3
                  searches further into the string for occurrences of "a" or "b".

                  Perl  has no direct equivalent of notempty, but it does make a special case of a pattern match
                  of the empty string within its split() function,  and  when  using  the  /g  modifier.  It  is
                  possible  to  emulate  Perl's  behavior after matching a null string by first trying the match
                  again at the same offset with notempty and anchored, and then, if that fails, by advancing the
                  starting offset (see below) and trying an ordinary match again.

                notbol:
                  This option specifies that the first character of the subject string is not the beginning of a
                  line, so the circumflex metacharacter  should  not  match  before  it.  Setting  this  without
                  multiline  (at  compile  time)  causes circumflex never to match. This option only affects the
                  behavior of the circumflex metacharacter. It does not affect \\A.

                noteol:
                  This option specifies that the end of the subject string is not the end  of  a  line,  so  the
                  dollar  metacharacter should not match it nor (except in multiline mode) a newline immediately
                  before it. Setting this without multiline (at compile time) causes dollar never to match. This
                  option affects only the behavior of the dollar metacharacter. It does not affect \\Z or \\z.

                {offset, integer() >= 0}:
                  Start matching at the offset (position) given in the subject string. The offset is zero-based,
                  so that the default is {offset,0} (all of the subject string).

                {newline, NLSpec}:
                  Override the default definition of a newline in the subject string, which is LF (ASCII 10)  in
                  Erlang.

                  cr:
                    Newline is indicated by a single character CR (ASCII 13)

                  lf:
                    Newline is indicated by a single character LF (ASCII 10), the default

                  crlf:
                    Newline is indicated by the two-character CRLF (ASCII 13 followed by ASCII 10) sequence.

                  anycrlf:
                    Any of the three preceding sequences should be recognized.

                  any:
                    Any of the newline sequences above, plus the Unicode sequences VT (vertical tab, U+000B), FF
                    (formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS  (paragraph
                    separator, U+2029).

                bsr_anycrlf:
                  Specifies  specifically that \R is to match only the cr, lf or crlf sequences, not the Unicode
                  specific newline characters. (overrides compilation option)

                bsr_unicode:
                  Specifies specifically that \R is to match all the Unicode newline characters (including  crlf
                  etc, the default).(overrides compilation option)

                {capture, ValueSpec}/{capture, ValueSpec, Type}:
                  Specifies  which  captured  substrings  are  returned and in what format. By default, re:run/3
                  captures all of the matching part of the substring as well as all capturing  subpatterns  (all
                  of  the pattern is automatically captured). The default return type is (zero-based) indexes of
                  the captured parts  of  the  string,  given  as  {Offset,Length}  pairs  (the  index  Type  of
                  capturing).

                  As an example of the default behavior, the following call:

                    re:run("ABCabcdABC","abcd",[]).

                  returns,  as  first  and  only captured string the matching part of the subject ("abcd" in the
                  middle) as a index pair {3,4}, where character positions are zero based, just as  in  offsets.
                  The return value of the call above would then be:

                    {match,[{3,4}]}

                  Another (and quite common) case is where the regular expression matches all of the subject, as
                  in:

                    re:run("ABCabcdABC",".*abcd.*",[]).

                  where the return value correspondingly will point out all of the string, beginning at index  0
                  and being 10 characters long:

                    {match,[{0,10}]}

                  If the regular expression contains capturing subpatterns, like in the following case:

                    re:run("ABCabcdABC",".*(abcd).*",[]).

                  all of the matched subject is captured, as well as the captured substrings:

                    {match,[{0,10},{3,4}]}

                  the complete matching pattern always giving the first return value in the list and the rest of
                  the subpatterns being added in the order they occurred in the regular expression.

                  The capture tuple is built up as follows:

                  ValueSpec:
                    Specifies which captured (sub)patterns are to be returned. The ValueSpec can  either  be  an
                    atom  describing  a predefined set of return values, or a list containing either the indexes
                    or the names of specific subpatterns to return.

                    The predefined sets of subpatterns are:

                    all:
                      All captured subpatterns including the complete matching string. This is the default.

                    first:
                      Only the first captured subpattern, which is always the  complete  matching  part  of  the
                      subject. All explicitly captured subpatterns are discarded.

                    all_but_first:
                      All  but  the first matching subpattern, i.e. all explicitly captured subpatterns, but not
                      the complete matching part of the subject string. This is useful if the regular expression
                      as a whole matches a large part of the subject, but the part you're interested in is in an
                      explicitly captured subpattern. If the return  type  is  list  or  binary,  not  returning
                      subpatterns you're not interested in is a good way to optimize.

                    none:
                      Do  not  return  matching subpatterns at all, yielding the single atom match as the return
                      value of the function when matching successfully instead of the  {match,  list()}  return.
                      Specifying an empty list gives the same behavior.

                    The  value list is a list of indexes for the subpatterns to return, where index 0 is for all
                    of the pattern, and 1 is  for  the  first  explicit  capturing  subpattern  in  the  regular
                    expression,  and  so forth. When using named captured subpatterns (see below) in the regular
                    expression, one can use atom()s or string()s to specify the subpatterns to be returned.  For
                    example, consider the regular expression:

                      ".*(abcd).*"

                    matched  against the string "ABCabcdABC", capturing only the "abcd" part (the first explicit
                    subpattern):

                      re:run("ABCabcdABC",".*(abcd).*",[{capture,[1]}]).

                    The call will yield the following result:

                      {match,[{3,4}]}

                    as the first explicitly captured subpattern is "(abcd)", matching "abcd" in the subject,  at
                    (zero-based) position 3, of length 4.

                    Now consider the same regular expression, but with the subpattern explicitly named 'FOO':

                      ".*(?<FOO>abcd).*"

                    With  this  expression,  we  could still give the index of the subpattern with the following
                    call:

                      re:run("ABCabcdABC",".*(?<FOO>abcd).*",[{capture,[1]}]).

                    giving the same result as before. But, since the subpattern is named, we  can  also  specify
                    its name in the value list:

                      re:run("ABCabcdABC",".*(?<FOO>abcd).*",[{capture,['FOO']}]).

                    which would yield the same result as the earlier examples, namely:

                      {match,[{3,4}]}

                    The  values  list  might  specify indexes or names not present in the regular expression, in
                    which case the return values vary depending on the type. If the type  is  index,  the  tuple
                    {-1,0}  is returned for values having no corresponding subpattern in the regexp, but for the
                    other types (binary and list), the values are the empty binary or list respectively.

                  Type:
                    Optionally specifies how captured substrings are to be returned. If omitted, the default  of
                    index is used. The Type can be one of the following:

                    index:
                      Return  captured substrings as pairs of byte indexes into the subject string and length of
                      the matching string  in  the  subject  (as  if  the  subject  string  was  flattened  with
                      iolist_to_binary/1  or  unicode:characters_to_binary/2  prior  to matching). Note that the
                      unicode option results in byte-oriented indexes in  a  (possibly  virtual)  UTF-8  encoded
                      binary.  A  byte  index  tuple  {0,2} might therefore represent one or two characters when
                      unicode is in effect. This might seem counter-intuitive, but  has  been  deemed  the  most
                      effective  and useful way to way to do it. To return lists instead might result in simpler
                      code if that is desired. This return type is the default.

                    list:
                      Return matching substrings as lists of  characters  (Erlang  string()s).  It  the  unicode
                      option  is  used in combination with the \C sequence in the regular expression, a captured
                      subpattern can contain bytes that are not valid UTF-8  (\C  matches  bytes  regardless  of
                      character  encoding).  In  that  case  the  list capturing may result in the same types of
                      tuples that unicode:characters_to_list/2 can return,  namely  three-tuples  with  the  tag
                      incomplete  or  error, the successfully converted characters and the invalid UTF-8 tail of
                      the conversion as a binary. The best strategy is to  avoid  using  the  \C  sequence  when
                      capturing lists.

                    binary:
                      Return  matching substrings as binaries. If the unicode option is used, these binaries are
                      in UTF-8. If the \C sequence is used together with unicode the  binaries  may  be  invalid
                      UTF-8.

                  In  general, subpatterns that were not assigned a value in the match are returned as the tuple
                  {-1,0} when type is index. Unassigned subpatterns are returned as the empty  binary  or  list,
                  respectively, for other return types. Consider the regular expression:

                    ".*((?<FOO>abdd)|a(..d)).*"

                  There  are  three  explicitly  capturing  subpatterns,  where the opening parenthesis position
                  determines the order in  the  result,  hence  ((?<FOO>abdd)|a(..d))  is  subpattern  index  1,
                  (?<FOO>abdd)  is  subpattern index 2 and (..d) is subpattern index 3. When matched against the
                  following string:

                    "ABCabcdABC"

                  the subpattern at index 2 won't match, as "abdd"  is  not  present  in  the  string,  but  the
                  complete  pattern  matches  (due  to  the  alternative  a(..d).  The  subpattern at index 2 is
                  therefore unassigned and the default return value will be:

                    {match,[{0,10},{3,4},{-1,0},{4,3}]}

                  Setting the capture Type to binary would give the following:

                    {match,[<<"ABCabcdABC">>,<<"abcd">>,<<>>,<<"bcd">>]}

                  where the empty binary (<<>>) represents the unassigned subpattern. In the binary  case,  some
                  information  about  the  matching  is  therefore lost, the <<>> might just as well be an empty
                  string captured.

                  If differentiation between empty matches and non existing subpatterns is  necessary,  use  the
                  type index and do the conversion to the final type in Erlang code.

                  When  the  option global is given, the capture specification affects each match separately, so
                  that:

                    re:run("cacb","c(a|b)",[global,{capture,[1],list}]).

                  gives the result:

                    {match,[["a"],["b"]]}

              The options solely affecting the compilation step are described in the re:compile/2 function.

       replace(Subject, RE, Replacement) -> iodata() | unicode:charlist()

              Types:

                 Subject = iodata() | unicode:charlist()
                 RE = mp() | iodata()
                 Replacement = iodata() | unicode:charlist()

              The same as replace(Subject,RE,Replacement,[]).

       replace(Subject, RE, Replacement, Options) ->
                  iodata() | unicode:charlist()

              Types:

                 Subject = iodata() | unicode:charlist()
                 RE = mp() | iodata() | unicode:charlist()
                 Replacement = iodata() | unicode:charlist()
                 Options = [Option]
                 Option = anchored
                        | global
                        | notbol
                        | noteol
                        | notempty
                        | {offset, integer() >= 0}
                        | {newline, NLSpec}
                        | bsr_anycrlf
                        | bsr_unicode
                        | {return, ReturnType}
                        | CompileOpt
                 ReturnType = iodata | list | binary
                 CompileOpt = compile_option()
                 NLSpec = cr | crlf | lf | anycrlf | any

              Replaces the matched part of the Subject string with the contents of Replacement.

              The permissible options are the same as for re:run/3,  except  that  the  capture  option  is  not
              allowed. Instead a {return, ReturnType} is present. The default return type is iodata, constructed
              in a way to minimize copying. The iodata result can be used directly in many I/O-operations. If  a
              flat  list()  is  desired,  specify  {return, list} and if a binary is preferred, specify {return,
              binary}.

              As in the re:run/3 function, an mp() compiled with the unicode option requires the Subject to be a
              Unicode  charlist(). If compilation is done implicitly and the unicode compilation option is given
              to this function, both the regular expression and the Subject should be  given  as  valid  Unicode
              charlist()s.

              The  replacement  string  can  contain  the  special character &, which inserts the whole matching
              expression in the result, and the special sequence \N (where N is an integer > 0),  \gN  or  \g{N}
              resulting  in  the subexpression number N will be inserted in the result. If no subexpression with
              that number is generated by the regular expression, nothing is inserted.

              To insert an & or \ in the result, precede it with a \. Note that Erlang already gives  a  special
              meaning  to \ in literal strings, so a single \ has to be written as "\\" and therefore a double \
              as "\\\\". Example:

                  re:replace("abcd","c","[&]",[{return,list}]).

              gives

                  "ab[c]d"

              while

                  re:replace("abcd","c","[\\&]",[{return,list}]).

              gives

                  "ab[&]d"

              As with re:run/3, compilation errors raise the badarg exception, re:compile/2 can be used  to  get
              more information about the error.

       split(Subject, RE) -> SplitList

              Types:

                 Subject = iodata() | unicode:charlist()
                 RE = mp() | iodata()
                 SplitList = [iodata() | unicode:charlist()]

              The same as split(Subject,RE,[]).

       split(Subject, RE, Options) -> SplitList

              Types:

                 Subject = iodata() | unicode:charlist()
                 RE = mp() | iodata() | unicode:charlist()
                 Options = [Option]
                 Option = anchored
                        | notbol
                        | noteol
                        | notempty
                        | {offset, integer() >= 0}
                        | {newline, nl_spec()}
                        | bsr_anycrlf
                        | bsr_unicode
                        | {return, ReturnType}
                        | {parts, NumParts}
                        | group
                        | trim
                        | CompileOpt
                 NumParts = integer() >= 0 | infinity
                 ReturnType = iodata | list | binary
                 CompileOpt = compile_option()
                   See compile/2 above.
                 SplitList = [RetData] | [GroupedRetData]
                 GroupedRetData = [RetData]
                 RetData = iodata() | unicode:charlist() | binary() | list()

              This  function  splits  the input into parts by finding tokens according to the regular expression
              supplied.

              The splitting is done basically by running a global regexp match and dividing the  initial  string
              wherever a match occurs. The matching part of the string is removed from the output.

              As in the re:run/3 function, an mp() compiled with the unicode option requires the Subject to be a
              Unicode charlist(). If compilation is done implicitly and the unicode compilation option is  given
              to  this  function,  both  the regular expression and the Subject should be given as valid Unicode
              charlist()s.

              The result is given as a list of "strings", the preferred datatype  given  in  the  return  option
              (default iodata).

              If subexpressions are given in the regular expression, the matching subexpressions are returned in
              the resulting list as well. An example:

                  re:split("Erlang","[ln]",[{return,list}]).

              will yield the result:

                  ["Er","a","g"]

              while

                  re:split("Erlang","([ln])",[{return,list}]).

              will yield

                  ["Er","l","a","n","g"]

              The text matching the subexpression (marked by the parentheses in the regexp) is inserted  in  the
              result  list  where  it  was  found. In effect this means that concatenating the result of a split
              where the whole regexp is a single subexpression (as in the example above) will always  result  in
              the original string.

              As there is no matching subexpression for the last part in the example (the "g"), there is nothing
              inserted after that. To make the group of strings and the parts matching the  subexpressions  more
              obvious, one might use the group option, which groups together the part of the subject string with
              the parts matching the subexpressions when the string was split:

                  re:split("Erlang","([ln])",[{return,list},group]).

              gives:

                  [["Er","l"],["a","n"],["g"]]

              Here the regular expression matched first the "l", causing "Er"  to  be  the  first  part  in  the
              result. When the regular expression matched, the (only) subexpression was bound to the "l", so the
              "l" is inserted in the group together with "Er". The next match is of the "n", making "a" the next
              part  to  be returned. Since the subexpression is bound to the substring "n" in this case, the "n"
              is inserted into this group. The last group consists of the rest of the string, as no more matches
              are found.

              By  default, all parts of the string, including the empty strings, are returned from the function.
              For example:

                  re:split("Erlang","[lg]",[{return,list}]).

              will return:

                  ["Er","an",[]]

              since the matching of the "g" in the end of  the  string  leaves  an  empty  rest  which  is  also
              returned.  This  behaviour differs from the default behaviour of the split function in Perl, where
              empty strings at the end are by default removed. To get the "trimming" default behavior  of  Perl,
              specify trim as an option:

                  re:split("Erlang","[lg]",[{return,list},trim]).

              The result will be:

                  ["Er","an"]

              The "trim" option in effect says; "give me as many parts as possible except the empty ones", which
              might be useful in some circumstances. You can also specify how many parts you want, by specifying
              {parts,N}:

                  re:split("Erlang","[lg]",[{return,list},{parts,2}]).

              This will give:

                  ["Er","ang"]

              Note that the last part is "ang", not "an", as we only specified splitting into two parts, and the
              splitting stops when enough parts are given, which is why the result differs from that of trim.

              More than three parts are not possible with this indata, so

                  re:split("Erlang","[lg]",[{return,list},{parts,4}]).

              will give the same result as the default, which is to be viewed as "an infinite number of parts".

              Specifying 0 as the number of parts gives the same effect as the option  trim.  If  subexpressions
              are  captured, empty subexpression matches at the end are also stripped from the result if trim or
              {parts,0} is specified.

              If you are familiar with Perl, the trim behaviour corresponds exactly to  the  Perl  default,  the
              {parts,N}  where N is a positive integer corresponds exactly to the Perl behaviour with a positive
              numerical third parameter and the default behaviour of re:split/3 corresponds  to  that  when  the
              Perl routine is given a negative integer as the third parameter.

              Summary of options not previously described for the re:run/3 function:

                {return,ReturnType}:
                  Specifies  how the parts of the original string are presented in the result list. The possible
                  types are:

                  iodata:
                    The variant of iodata() that gives the least copying of data with the current implementation
                    (often a binary, but don't depend on it).

                  binary:
                    All parts returned as binaries.

                  list:
                    All parts returned as lists of characters ("strings").

                group:
                  Groups  together  the  part  of  the  string  with  the  parts  of  the  string  matching  the
                  subexpressions of the regexp.

                  The return value from the function will in this case be a  list()  of  list()s.  Each  sublist
                  begins  with  the string picked out of the subject string, followed by the parts matching each
                  of the subexpressions in order of occurrence in the regular expression.

                {parts,N}:
                  Specifies the number of parts the subject string is to be split into.

                  The number of parts should be a positive integer for a specific maximum on the number of parts
                  and  infinity  for  the  maximum  number of parts possible (the default). Specifying {parts,0}
                  gives as many parts as possible disregarding empty parts at the end, the  same  as  specifying
                  trim

                trim:
                  Specifies  that  empty  parts at the end of the result list are to be disregarded. The same as
                  specifying {parts,0}. This corresponds to the default behaviour of the split built in function
                  in Perl.

PERL LIKE REGULAR EXPRESSIONS SYNTAX

       The  following  sections  contain reference material for the regular expressions used by this module. The
       regular expression reference is based on the PCRE documentation, with  changes  in  cases  where  the  re
       module behaves differently to the PCRE library.

PCRE REGULAR EXPRESSION DETAILS

       The  syntax  and  semantics of the regular expressions that are supported by PCRE are described in detail
       below. Perl's regular expressions are described in its own  documentation,  and  regular  expressions  in
       general  are  covered  in  a  number  of  books,  some  of  which have copious examples. Jeffrey Friedl's
       "Mastering Regular Expressions", published by O'Reilly, covers regular expressions in great detail.  This
       description of PCRE's regular expressions is intended as reference material.

       The reference material is divided into the following sections:

         * Newline conventions

         * Characters and metacharacters

         * Backslash

         * Circumflex and dollar

         * Full stop (period, dot)

         * Matching a single byte

         * Square brackets and character classes

         * POSIX character classes

         * Vertical bar

         * Internal option setting

         * Subpatterns

         * Duplicate subpattern numbers

         * Named subpatterns

         * Repetition

         * Atomic grouping and possessive quantifiers

         * Back references

         * Assertions

         * Conditional subpatterns

         * Comments

         * Recursive patterns

         * Subpatterns as subroutines

         * Backtracking control

NEWLINE CONVENTIONS

       PCRE  supports  five  different  conventions for indicating line breaks in strings: a single CR (carriage
       return) character, a single LF (linefeed) character, the two-character sequence CRLF , any of  the  three
       preceding, or any Unicode newline sequence.

       It  is  also  possible  to  specify  a  newline  convention  by starting a pattern string with one of the
       following five sequences:

         (*CR):
           carriage return

         (*LF):
           linefeed

         (*CRLF):
           carriage return, followed by linefeed

         (*ANYCRLF):
           any of the three above

         (*ANY):
           all Unicode newline sequences

       These override the default and the options given to re:compile/2. For example, the pattern:

       (*CR)a.b

       changes the convention to CR. That pattern matches "a\nb" because LF is no longer a  newline.  Note  that
       these  special  settings,  which  are  not  Perl-compatible,  are  recognized only at the very start of a
       pattern, and that they must be in upper case. If more than one of them is present, the last one is used.

       The newline convention does not affect what the \R escape sequence  matches.  By  default,  this  is  any
       Unicode newline sequence, for Perl compatibility. However, this can be changed; see the description of \R
       in the section entitled "Newline sequences" below. A change of \R setting can be combined with  a  change
       of newline convention.

CHARACTERS AND METACHARACTERS

       A  regular  expression  is  a  pattern  that is matched against a subject string from left to right. Most
       characters stand for themselves in a pattern, and match the corresponding characters in the subject. As a
       trivial example, the pattern

       The quick brown fox

       matches  a  portion  of a subject string that is identical to itself. When caseless matching is specified
       (the caseless option), letters are matched independently of case.

       The power of regular expressions comes from the ability to include alternatives and  repetitions  in  the
       pattern. These are encoded in the pattern by the use of metacharacters, which do not stand for themselves
       but instead are interpreted in some special way.

       There are two different sets of metacharacters: those that are recognized anywhere in the pattern  except
       within  square  brackets,  and those that are recognized within square brackets. Outside square brackets,
       the metacharacters are as follows:

         \:
           general escape character with several uses

         ^:
           assert start of string (or line, in multiline mode)

         $:
           assert end of string (or line, in multiline mode)

         .:
           match any character except newline (by default)

         [:
           start character class definition

         |:
           start of alternative branch

         (:
           start subpattern

         ):
           end subpattern

         ?:
           extends the meaning of (, also 0 or 1 quantifier, also quantifier minimizer

         *:
           0 or more quantifier

         +:
           1 or more quantifier, also "possessive quantifier"

         {:
           start min/max quantifier

       Part of a pattern that is in square brackets is called a "character class". In a character class the only
       metacharacters are:

         \:
           general escape character

         ^:
           negate the class, but only if the first character

         -:
           indicates character range

         [:
           POSIX character class (only if followed by POSIX syntax)

         ]:
           terminates the character class

       The following sections describe the use of each of the metacharacters.

BACKSLASH

       The  backslash character has several uses. Firstly, if it is followed by a non-alphanumeric character, it
       takes away any special meaning that character may have. This use of  backslash  as  an  escape  character
       applies both inside and outside character classes.

       For  example,  if  you  want  to  match  a * character, you write \* in the pattern. This escaping action
       applies whether or not the following character would otherwise be interpreted as a metacharacter,  so  it
       is  always  safe  to  precede  a non-alphanumeric with backslash to specify that it stands for itself. In
       particular, if you want to match a backslash, you write \\.

       If a pattern is compiled with the extended option, whitespace in the pattern (other than in  a  character
       class) and characters between a # outside a character class and the next newline are ignored. An escaping
       backslash can be used to include a whitespace or # character as part of the pattern.

       If you want to remove the special meaning from a sequence of characters, you can do so  by  putting  them
       between  \Q  and  \E.  This  is  different  from  Perl in that $ and @ are handled as literals in \Q...\E
       sequences in PCRE, whereas in Perl, $ and @ cause variable interpolation. Note the following examples:

         Pattern           PCRE matches   Perl matches

         \Qabc$xyz\E       abc$xyz        abc followed by the contents of $xyz
         \Qabc\$xyz\E      abc\$xyz       abc\$xyz
         \Qabc\E\$\Qxyz\E  abc$xyz        abc$xyz

       The \Q...\E sequence is recognized both inside and outside character classes.

       Non-printing characters

       A second use of backslash provides a way of encoding non-printing characters in  patterns  in  a  visible
       manner.  There is no restriction on the appearance of non-printing characters, apart from the binary zero
       that terminates a pattern, but when a pattern is being prepared by text editing, it is usually easier  to
       use one of the following escape sequences than the binary character it represents:

         \a:
           alarm, that is, the BEL character (hex 07)

         \cx:
           "control-x", where x is any character

         \e :
           escape (hex 1B)

         \f:
           formfeed (hex 0C)

         \n:
           linefeed (hex 0A)

         \r:
           carriage return (hex 0D)

         \t :
           tab (hex 09)

         \ddd:
           character with octal code ddd, or backreference

         \xhh :
           character with hex code hh

         \x{hhh..}:
           character with hex code hhh..

       The precise effect of \cx is as follows: if x is a lower case letter, it is converted to upper case. Then
       bit 6 of the character (hex 40) is inverted. Thus \cz becomes hex 1A, but \c{ becomes hex 3B,  while  \c;
       becomes hex 7B.

       After  \x,  from  zero  to  two  hexadecimal digits are read (letters can be in upper or lower case). Any
       number of hexadecimal digits may appear between \x{ and }, but the value of the character  code  must  be
       less  than  256  in  non-UTF-8  mode,  and  less  than 2**31 in UTF-8 mode. That is, the maximum value in
       hexadecimal is 7FFFFFFF. Note that this is bigger than the largest Unicode code point, which is 10FFFF.

       If characters other than hexadecimal digits appear between \x{ and }, or if there is  no  terminating  },
       this form of escape is not recognized. Instead, the initial \x will be interpreted as a basic hexadecimal
       escape, with no following digits, giving a character whose value is zero.

       Characters whose value is less than 256 can be defined by either of the two syntaxes for \x. There is  no
       difference in the way they are handled. For example, \xdc is exactly the same as \x{dc}.

       After \0 up to two further octal digits are read. If there are fewer than two digits, just those that are
       present are used. Thus the sequence \0\x\07 specifies two binary zeros followed by a BEL character  (code
       value 7). Make sure you supply two digits after the initial zero if the pattern character that follows is
       itself an octal digit.

       The handling of a backslash followed by a digit other than 0 is complicated. Outside a  character  class,
       PCRE  reads  it  and any following digits as a decimal number. If the number is less than 10, or if there
       have been at least that many previous capturing left parentheses in the expression, the  entire  sequence
       is taken as a back reference. A description of how this works is given later, following the discussion of
       parenthesized subpatterns.

       Inside a character class, or if the decimal number is greater than 9 and there have not  been  that  many
       capturing  subpatterns,  PCRE re-reads up to three octal digits following the backslash, and uses them to
       generate a data character. Any subsequent digits stand for themselves. The value of a character specified
       in  octal  must be less than \400. In non-UTF-8 mode, the value of a character specified in octal must be
       less than \400. In UTF-8 mode, values up to \777 are permitted. For example:

         \040:
           is another way of writing a space

         \40:
           is the same, provided there are fewer than 40 previous capturing subpatterns

         \7:
           is always a back reference

         \11:
            might be a back reference, or another way of writing a tab

         \011:
           is always a tab

         \0113:
           is a tab followed by the character "3"

         \113:
           might be a back reference, otherwise the character with octal code 113

         \377:
           might be a back reference, otherwise the byte consisting entirely of 1 bits

         \81:
           is either a back reference, or a binary zero followed by the two characters "8" and "1"

       Note that octal values of 100 or greater must not be introduced by a leading zero, because no  more  than
       three octal digits are ever read.

       All  the  sequences  that  define  a single character value can be used both inside and outside character
       classes. In addition, inside a character class, the sequence \b is interpreted as the backspace character
       (hex  08),  and  the  sequences  \R  and  \X are interpreted as the characters "R" and "X", respectively.
       Outside a character class, these sequences have different meanings (see below).

       Absolute and relative back references

       The sequence \g followed by an unsigned or a negative  number,  optionally  enclosed  in  braces,  is  an
       absolute or relative back reference. A named back reference can be coded as \g{name}. Back references are
       discussed later, following the discussion of parenthesized subpatterns.

       Generic character types

       Another use of backslash is for specifying generic character types. The following are always recognized:

         \d:
           any decimal digit

         \D:
           any character that is not a decimal digit

         \h:
           any horizontal whitespace character

         \H:
           any character that is not a horizontal whitespace character

         \s:
           any whitespace character

         \S:
           any character that is not a whitespace character

         \v:
           any vertical whitespace character

         \V:
           any character that is not a vertical whitespace character

         \w:
           any "word" character

         \W:
           any "non-word" character

       Each pair of escape sequences partitions the complete set of characters into two disjoint sets. Any given
       character matches one, and only one, of each pair.

       These  character type sequences can appear both inside and outside character classes. They each match one
       character of the appropriate type. If the current matching point is at the end of the subject string, all
       of them fail, since there is no character to match.

       For  compatibility  with Perl, \s does not match the VT character (code 11). This makes it different from
       the POSIX "space" class. The \s characters are HT (9), LF (10), FF (12), CR (13), and space (32). If "use
       locale;" is included in a Perl script, \s may match the VT character. In PCRE, it never does.

       In  UTF-8  mode,  characters with values greater than 128 never match \d, \s, or \w, and always match \D,
       \S, and \W. This is true even when Unicode character  property  support  is  available.  These  sequences
       retain their original meanings from before UTF-8 support was available, mainly for efficiency reasons.

       The  sequences  \h,  \H,  \v, and \V are Perl 5.10 features. In contrast to the other sequences, these do
       match certain high-valued codepoints in UTF-8 mode. The horizontal space characters are:

         U+0009:
           Horizontal tab

         U+0020:
           Space

         U+00A0:
           Non-break space

         U+1680:
           Ogham space mark

         U+180E:
           Mongolian vowel separator

         U+2000:
           En quad

         U+2001:
           Em quad

         U+2002:
           En space

         U+2003:
           Em space

         U+2004:
           Three-per-em space

         U+2005:
           Four-per-em space

         U+2006:
           Six-per-em space

         U+2007:
           Figure space

         U+2008:
           Punctuation space

         U+2009:
           Thin space

         U+200A:
           Hair space

         U+202F:
           Narrow no-break space

         U+205F:
           Medium mathematical space

         U+3000:
           Ideographic space

       The vertical space characters are:

         U+000A:
           Linefeed

         U+000B:
           Vertical tab

         U+000C:
           Formfeed

         U+000D:
           Carriage return

         U+0085:
           Next line

         U+2028:
           Line separator

         U+2029:
           Paragraph separator

       A "word" character is an underscore or any character less than  256  that  is  a  letter  or  digit.  The
       definition  of  letters  and digits is controlled by PCRE's low-valued character tables, which are always
       ISO-8859-1.

       Newline sequences

       Outside a character class, by default, the escape sequence \R matches any Unicode newline sequence.  This
       is a Perl 5.10 feature. In non-UTF-8 mode \R is equivalent to the following:

       (?>\r\n|\n|\x0b|\f|\r|\x85)

       This is an example of an "atomic group", details of which are given below.

       This  particular  group matches either the two-character sequence CR followed by LF, or one of the single
       characters LF (linefeed, U+000A), VT (vertical tab, U+000B), FF (formfeed, U+000C), CR (carriage  return,
       U+000D),  or  NEL (next line, U+0085). The two-character sequence is treated as a single unit that cannot
       be split.

       In UTF-8 mode, two additional characters whose codepoints are  greater  than  255  are  added:  LS  (line
       separator, U+2028) and PS (paragraph separator, U+2029). Unicode character property support is not needed
       for these characters to be recognized.

       It is possible to restrict \R to match only CR, LF, or CRLF (instead of the complete set of Unicode  line
       endings) by setting the option bsr_anycrlf either at compile time or when the pattern is matched. (BSR is
       an abbreviation for "backslash R".) This can be made the default when PCRE is built; if this is the case,
       the  other  behaviour  can  be requested via the bsr_unicode option. It is also possible to specify these
       settings by starting a pattern string with one of the following sequences:

       (*BSR_ANYCRLF) CR, LF, or CRLF only (*BSR_UNICODE) any Unicode newline sequence

       These override the default and the options given to re:compile/2, but they can be overridden  by  options
       given  to  re:run/3. Note that these special settings, which are not Perl-compatible, are recognized only
       at the very start of a pattern, and that they must be in upper case. If more than one of them is present,
       the  last  one  is used. They can be combined with a change of newline convention, for example, a pattern
       can start with:

       (*ANY)(*BSR_ANYCRLF)

       Inside a character class, \R matches the letter "R".

       Unicode character properties

       When PCRE is built with Unicode character property support, three additional escape sequences that  match
       characters  with specific properties are available. When not in UTF-8 mode, these sequences are of course
       limited to testing characters whose codepoints are less than 256, but they do  work  in  this  mode.  The
       extra escape sequences are:

       \p{xx} a character with the xx property \P{xx} a character without the xx property \X an extended Unicode
       sequence

       The property names represented by xx above are limited to the Unicode script names, the general  category
       properties,  and  "Any",  which  matches  any  character  (including  newline).  Other properties such as
       "InMusicalSymbols" are not currently supported by PCRE. Note that \P{Any} does not match any  characters,
       so always causes a match failure.

       Sets  of  Unicode  characters  are defined as belonging to certain scripts. A character from one of these
       sets can be matched using a script name. For example:

       \p{Greek} \P{Han}

       Those that are not part of an identified script are lumped together as  "Common".  The  current  list  of
       scripts is:

         * Arabic

         * Armenian

         * Balinese

         * Bengali

         * Bopomofo

         * Braille

         * Buginese

         * Buhid

         * Canadian_Aboriginal

         * Cherokee

         * Common

         * Coptic

         * Cuneiform

         * Cypriot

         * Cyrillic

         * Deseret

         * Devanagari

         * Ethiopic

         * Georgian

         * Glagolitic

         * Gothic

         * Greek

         * Gujarati

         * Gurmukhi

         * Han

         * Hangul

         * Hanunoo

         * Hebrew

         * Hiragana

         * Inherited

         * Kannada

         * Katakana

         * Kharoshthi

         * Khmer

         * Lao

         * Latin

         * Limbu

         * Linear_B

         * Malayalam

         * Mongolian

         * Myanmar

         * New_Tai_Lue

         * Nko

         * Ogham

         * Old_Italic

         * Old_Persian

         * Oriya

         * Osmanya

         * Phags_Pa

         * Phoenician

         * Runic

         * Shavian

         * Sinhala

         * Syloti_Nagri

         * Syriac

         * Tagalog

         * Tagbanwa

         * Tai_Le

         * Tamil

         * Telugu

         * Thaana

         * Thai

         * Tibetan

         * Tifinagh

         * Ugaritic

         * Yi

       Each  character  has  exactly  one general category property, specified by a two-letter abbreviation. For
       compatibility with Perl, negation can be specified by including a circumflex between  the  opening  brace
       and the property name. For example, \p{^Lu} is the same as \P{Lu}.

       If only one letter is specified with \p or \P, it includes all the general category properties that start
       with that letter. In this case, in the absence of negation, the curly brackets in the escape sequence are
       optional; these two examples have the same effect:

         * \p{L}

         * \pL

       The following general category property codes are supported:

         C:
           Other

         Cc:
           Control

         Cf:
           Format

         Cn:
           Unassigned

         Co:
           Private use

         Cs:
           Surrogate

         L:
           Letter

         Ll:
           Lower case letter

         Lm:
           Modifier letter

         Lo:
           Other letter

         Lt:
           Title case letter

         Lu:
           Upper case letter

         M:
           Mark

         Mc:
           Spacing mark

         Me:
           Enclosing mark

         Mn:
           Non-spacing mark

         N:
           Number

         Nd:
           Decimal number

         Nl:
           Letter number

         No:
           Other number

         P:
           Punctuation

         Pc:
           Connector punctuation

         Pd:
           Dash punctuation

         Pe:
           Close punctuation

         Pf:
           Final punctuation

         Pi:
           Initial punctuation

         Po:
           Other punctuation

         Ps:
           Open punctuation

         S:
           Symbol

         Sc:
           Currency symbol

         Sk:
           Modifier symbol

         Sm:
           Mathematical symbol

         So:
           Other symbol

         Z:
           Separator

         Zl:
           Line separator

         Zp:
           Paragraph separator

         Zs:
           Space separator

       The special property L& is also supported: it matches a character that has the Lu, Ll, or Lt property, in
       other words, a letter that is not classified as a modifier or "other".

       The Cs (Surrogate) property applies only to characters in the range U+D800 to U+DFFF. Such characters are
       not valid in UTF-8 strings (see RFC 3629) and so cannot be tested by PCRE, unless UTF-8 validity checking
       has been turned off (see the discussion of no_utf8_check in the pcreapi page).

       The long synonyms for these properties that Perl supports (such as \p{Letter}) are not supported by PCRE,
       nor is it permitted to prefix any of these properties with "Is".

       No  character  that  is  in the Unicode table has the Cn (unassigned) property. Instead, this property is
       assumed for any code point that is not in the Unicode table.

       Specifying caseless matching does not affect these escape sequences. For example, \p{Lu}  always  matches
       only upper case letters.

       The  \X  escape  matches  any  number of Unicode characters that form an extended Unicode sequence. \X is
       equivalent to

       (?>\PM\pM*)

       That is, it matches a character without the "mark" property, followed by zero or more characters with the
       "mark"  property,  and  treats  the  sequence  as an atomic group (see below). Characters with the "mark"
       property are typically accents that affect the preceding character. None of  them  have  codepoints  less
       than 256, so in non-UTF-8 mode \X matches any one character.

       Matching characters by Unicode property is not fast, because PCRE has to search a structure that contains
       data for over fifteen thousand characters. That is why the traditional escape sequences such as \d and \w
       do not use Unicode properties in PCRE.

       Resetting the match start

       The  escape sequence \K, which is a Perl 5.10 feature, causes any previously matched characters not to be
       included in the final matched sequence. For example, the pattern:

       foo\Kbar

       matches "foobar", but reports that it has  matched  "bar".  This  feature  is  similar  to  a  lookbehind
       assertion  (described  below).  However, in this case, the part of the subject before the real match does
       not have to be of fixed length, as lookbehind assertions do. The use of \K does not  interfere  with  the
       setting of captured substrings. For example, when the pattern

       (foo)\Kbar

       matches "foobar", the first substring is still set to "foo".

       Simple assertions

       The  final use of backslash is for certain simple assertions. An assertion specifies a condition that has
       to be met at a particular point in a match, without consuming any characters from the subject string. The
       use of subpatterns for more complicated assertions is described below. The backslashed assertions are:

         \b:
           matches at a word boundary

         \B:
           matches when not at a word boundary

         \A:
           matches at the start of the subject

         \Z:
           matches at the end of the subject also matches before a newline at the end of the subject

         \z:
           matches only at the end of the subject

         \G:
           matches at the first matching position in the subject

       These  assertions  may  not appear in character classes (but note that \b has a different meaning, namely
       the backspace character, inside a character class).

       A word boundary is a position in the  subject  string  where  the  current  character  and  the  previous
       character  do not both match \w or \W (i.e. one matches \w and the other matches \W), or the start or end
       of the string if the first or last character matches \w, respectively.

       The \A, \Z, and \z assertions differ from the traditional circumflex and dollar (described  in  the  next
       section)  in  that they only ever match at the very start and end of the subject string, whatever options
       are set. Thus, they are independent of multiline mode. These three assertions are  not  affected  by  the
       notbol  or  noteol  options, which affect only the behaviour of the circumflex and dollar metacharacters.
       However, if the startoffset argument of re:run/3 is non-zero, indicating that matching is to start  at  a
       point  other  than  the beginning of the subject, \A can never match. The difference between \Z and \z is
       that \Z matches before a newline at the end of the string as well as at the very end, whereas \z  matches
       only at the end.

       The  \G  assertion is true only when the current matching position is at the start point of the match, as
       specified by the startoffset argument of re:run/3. It differs from \A when the value  of  startoffset  is
       non-zero.  By calling re:run/3 multiple times with appropriate arguments, you can mimic Perl's /g option,
       and it is in this kind of implementation where \G can be useful.

       Note, however, that PCRE's interpretation of \G, as the start of the current match, is  subtly  different
       from  Perl's, which defines it as the end of the previous match. In Perl, these can be different when the
       previously matched string was empty. Because PCRE does just one match at a time, it cannot reproduce this
       behaviour.

       If  all  the  alternatives  of  a pattern begin with \G, the expression is anchored to the starting match
       position, and the "anchored" flag is set in the compiled regular expression.

CIRCUMFLEX AND DOLLAR

       Outside a character class, in the default matching mode, the circumflex character is an assertion that is
       true  only  if  the  current  matching  point  is  at the start of the subject string. If the startoffset
       argument of re:run/3 is non-zero, circumflex can never match if the multiline option is unset.  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 that is true only if the current matching point is at the end of the
       subject string, or immediately before a newline at the end of 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 dollar_endonly option at compile time. This does not affect the \Z assertion.

       The  meanings  of  the  circumflex and dollar characters are changed if the multiline option is set. When
       this is the case, a circumflex matches immediately after internal newlines as well as at the start of the
       subject  string.  It  does  not  match  after a newline that ends the string. A dollar matches before any
       newlines in the string, as well as at the very end, when multiline is set. When newline is  specified  as
       the two-character sequence CRLF, isolated CR and LF characters do not indicate newlines.

       For example, the pattern /^abc$/ matches the subject string "def\nabc" (where \n represents a newline) 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, and a match for circumflex is possible when
       the startoffset argument of re:run/3 is non-zero. The dollar_endonly option is ignored  if  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 it is always anchored, whether or not multiline  is
       set.

FULL STOP (PERIOD, DOT)

       Outside  a  character  class, a dot in the pattern matches any one character in the subject string except
       (by default) a character that signifies the end of a line. In UTF-8 mode, the matched  character  may  be
       more than one byte long.

       When  a  line  ending  is  defined as a single character, dot never matches that character; when the two-
       character sequence CRLF is used, dot does not match CR if it is immediately followed by LF, but otherwise
       it  matches  all  characters  (including  isolated  CRs and LFs). When any Unicode line endings are being
       recognized, dot does not match CR or LF or any of the other line ending characters.

       The behaviour of dot with regard to newlines can be changed. If the dotall option is set, a  dot  matches
       any  one  character,  without  exception.  If  the  two-character sequence CRLF is present in the subject
       string, it takes two dots to match it.

       The handling of dot is  entirely  independent  of  the  handling  of  circumflex  and  dollar,  the  only
       relationship being that they both involve newlines. Dot has no special meaning in a character class.

MATCHING A SINGLE BYTE

       Outside  a  character  class, the escape sequence \C matches any one byte, both in and out of UTF-8 mode.
       Unlike a dot, it always matches any line-ending characters. The feature is provided in Perl in  order  to
       match  individual  bytes in UTF-8 mode. Because it breaks up UTF-8 characters into individual bytes, what
       remains in the string may be a malformed UTF-8 string. For this reason, the \C escape  sequence  is  best
       avoided.

       PCRE  does  not allow \C to appear in lookbehind assertions (described below), because in UTF-8 mode this
       would make it impossible to calculate the length of the lookbehind.

SQUARE BRACKETS AND CHARACTER CLASSES

       An opening square bracket introduces a character class, terminated by a closing square bracket. A closing
       square  bracket  on  its  own  is not special. If a closing square bracket is required as a member of the
       class, it should be the first data character in the class (after an initial circumflex,  if  present)  or
       escaped with a backslash.

       A character class matches a single character in the subject. In UTF-8 mode, the character may occupy more
       than one byte. A matched character must be in the set of characters defined  by  the  class,  unless  the
       first  character in the class definition is a circumflex, in which case the subject character must not be
       in the set defined by the class. If a circumflex is actually required as a member of the class, ensure it
       is not the first character, or escape it with a backslash.

       For  example,  the  character  class  [aeiou]  matches  any  lower case vowel, while [^aeiou] matches any
       character that is not a lower case vowel. Note that a  circumflex  is  just  a  convenient  notation  for
       specifying  the  characters  that are in the class by enumerating those that are not. A class that starts
       with a circumflex is not an assertion: it still  consumes  a  character  from  the  subject  string,  and
       therefore it fails if the current pointer is at the end of the string.

       In  UTF-8 mode, characters with values greater than 255 can be included in a class as a literal string of
       bytes, or by using the \x{ escaping mechanism.

       When caseless matching is set, any letters in a class represent both their  upper  case  and  lower  case
       versions, so for example, a caseless [aeiou] matches "A" as well as "a", and a caseless [^aeiou] does not
       match "A", whereas a caseful version would. In UTF-8 mode, PCRE always understands the  concept  of  case
       for  characters  whose  values are less than 128, so caseless matching is always possible. For characters
       with higher values, the concept of case is supported if PCRE is compiled with Unicode  property  support,
       but  not  otherwise.  If  you want to use caseless matching for characters 128 and above, you must ensure
       that PCRE is compiled with Unicode property support as well as with UTF-8 support.

       Characters that might indicate line breaks are never treated in any special way when  matching  character
       classes,  whatever  line-ending  sequence  is  in  use,  and whatever setting of the dotall and multiline
       options is used. A class such as [^a] always matches one of these characters.

       The minus (hyphen) character can be used to specify a range of  characters  in  a  character  class.  For
       example,  [d-m]  matches  any  letter  between  d and m, inclusive. If a minus character is required in a
       class, it must be escaped with a backslash or appear in a position where  it  cannot  be  interpreted  as
       indicating a range, typically as the first or last character in the class.

       It  is  not possible to have the literal character "]" as the end character of a range. A pattern such as
       [W-]46] is interpreted as a class of two characters ("W" and "-") followed by a literal string "46]",  so
       it would match "W46]" or "-46]". However, if the "]" is escaped with a backslash it is interpreted as the
       end of range, so [W-\]46] is interpreted as a class containing a range followed by two other  characters.
       The octal or hexadecimal representation of "]" can also be used to end a range.

       Ranges  operate  in  the  collating  sequence  of  character values. They can also be used for characters
       specified numerically, for example [\000-\037]. In UTF-8 mode, ranges can include characters whose values
       are greater than 255, for example [\x{100}-\x{2ff}].

       If  a range that includes letters is used when caseless matching is set, it matches the letters in either
       case. For example, [W-c] is equivalent to [][\\^_`wxyzabc], matched caselessly , and in  non-UTF-8  mode,
       if  character  tables  for  a French locale are in use, [\xc8-\xcb] matches accented E characters in both
       cases. In UTF-8 mode, PCRE supports the concept of case for characters with values greater than 128  only
       when it is compiled with Unicode property support.

       The  character types \d, \D, \p, \P, \s, \S, \w, and \W may also appear in a character class, and add the
       characters that they match to the class.  For  example,  [\dABCDEF]  matches  any  hexadecimal  digit.  A
       circumflex  can conveniently be used with the upper case character types to specify a more restricted set
       of characters than the matching lower case type. For example, the class  [^\W_]  matches  any  letter  or
       digit, but not underscore.

       The only metacharacters that are recognized in character classes are backslash, hyphen (only where it can
       be interpreted as specifying a range), circumflex (only at the start), opening square bracket (only  when
       it  can  be  interpreted  as  introducing a POSIX class name - see the next section), and the terminating
       closing square bracket. However, escaping other non-alphanumeric characters does no harm.

POSIX CHARACTER CLASSES

       Perl supports the POSIX notation for character classes. This uses names enclosed by [: and :] within  the
       enclosing square brackets. PCRE also supports this notation. For example,

       [01[:alpha:]%]

       matches "0", "1", any alphabetic character, or "%". The supported class names are

         alnum:
           letters and digits

         alpha:
           letters

         ascii:
           character codes 0 - 127

         blank:
           space or tab only

         cntrl:
           control characters

         digit:
           decimal digits (same as \d)

         graph:
           printing characters, excluding space

         lower:
           lower case letters

         print:
           printing characters, including space

         punct:
           printing characters, excluding letters and digits

         space:
           whitespace (not quite the same as \s)

         upper:
           upper case letters

         word:
           "word" characters (same as \w)

         xdigit:
           hexadecimal digits

       The  "space"  characters are HT (9), LF (10), VT (11), FF (12), CR (13), and space (32). Notice that this
       list includes the VT character (code 11). This makes "space" different to \s, which does not  include  VT
       (for Perl compatibility).

       The name "word" is a Perl extension, and "blank" is a GNU extension from Perl 5.8. Another Perl extension
       is negation, which is indicated by a ^ character after the colon. For example,

       [12[:^digit:]]

       matches "1", "2", or any non-digit. PCRE (and Perl) also recognize the POSIX  syntax  [.ch.]  and  [=ch=]
       where  "ch"  is  a  "collating  element",  but these are not supported, and an error is given if they are
       encountered.

       In UTF-8 mode, characters with values greater than 128 do not match any of the POSIX character classes.

VERTICAL BAR

       Vertical bar characters are used to separate alternative patterns. For example, the pattern

       gilbert|sullivan

       matches either "gilbert" or "sullivan". Any number of alternatives may appear, and an  empty  alternative
       is  permitted (matching the empty string). The matching process tries each alternative in turn, from left
       to right, and the first one that succeeds is used. If the alternatives are within a  subpattern  (defined
       below),  "succeeds"  means  matching  the  rest  of  the  main  pattern as well as the alternative in the
       subpattern.

INTERNAL OPTION SETTING

       The settings of the caseless, multiline, dotall, and extended options (which are Perl-compatible) can  be
       changed  from  within the pattern by a sequence of Perl option letters enclosed between "(?" and ")". The
       option letters are

         i:
           for caseless

         m:
           for multiline

         s:
           for dotall

         x:
           for extended

       For example, (?im) sets caseless, multiline matching. It is also  possible  to  unset  these  options  by
       preceding  the  letter  with  a hyphen, and a combined setting and unsetting such as (?im-sx), which sets
       caseless and multiline while unsetting dotall and extended, is also permitted. If a letter  appears  both
       before and after the hyphen, the option is unset.

       The  PCRE-specific  options  dupnames,  ungreedy,  and  extra can be changed in the same way as the Perl-
       compatible options by using the characters J, U and X respectively.

       When an option change occurs at top level (that  is,  not  inside  subpattern  parentheses),  the  change
       applies  to  the  remainder  of the pattern that follows. If the change is placed right at the start of a
       pattern, PCRE extracts it into the global options

       An option change within a subpattern (see below for a description of subpatterns) affects only that  part
       of the current pattern that follows it, so

       (a(?i)b)c

       matches  abc  and aBc and no other strings (assuming caseless is not used). By this means, options can be
       made to have different settings in different parts of the pattern. Any changes made in one alternative do
       carry on into subsequent branches within the same subpattern. For example,

       (a(?i)b|c)

       matches  "ab", "aB", "c", and "C", even though when matching "C" the first branch is abandoned before the
       option setting. This is because the effects of option settings happen at compile  time.  There  would  be
       some very weird behaviour otherwise.

       Note:  There are other PCRE-specific options that can be set by the application when the compile or match
       functions are called. In some cases the pattern can contain special leading sequences  to  override  what
       the  application  has  set or what has been defaulted. Details are given in the section entitled "Newline
       sequences" above.

SUBPATTERNS

       Subpatterns are delimited by parentheses (round brackets), which can be nested. Turning part of a pattern
       into a subpattern does two things:

       1. It localizes a set of alternatives. For example, the pattern

       cat(aract|erpillar|)

       matches  one  of  the  words "cat", "cataract", or "caterpillar". Without the parentheses, it would match
       "cataract", "erpillar" or an empty string.

       2. It sets up the subpattern as a capturing subpattern.  This  means  that,  when  the  complete  pattern
       matches,  that portion of the subject string that matched the subpattern is passed back to the caller via
       the return value of re:run/3. Opening parentheses are counted from left to right  (starting  from  1)  to
       obtain numbers for the capturing subpatterns.

       For example, if the string "the red king" is matched against the pattern

       the ((red|white) (king|queen))

       the captured substrings are "red king", "red", and "king", and are numbered 1, 2, and 3, respectively.

       The  fact that plain parentheses fulfil two functions is not always helpful. There are often times when a
       grouping subpattern is required without a capturing requirement. If an opening parenthesis is followed by
       a  question mark and a colon, the subpattern does not do any capturing, and is not counted when computing
       the number of any subsequent capturing subpatterns. For example, if  the  string  "the  white  queen"  is
       matched against the pattern

       the ((?:red|white) (king|queen))

       the  captured  substrings  are "white queen" and "queen", and are numbered 1 and 2. The maximum number of
       capturing subpatterns is 65535.

       As a convenient shorthand, if  any  option  settings  are  required  at  the  start  of  a  non-capturing
       subpattern, the option letters may appear between the "?" and the ":". Thus the two patterns

         * (?i:saturday|sunday)

         * (?:(?i)saturday|sunday)

       match  exactly  the  same  set of strings. Because alternative branches are tried from left to right, and
       options are not reset until the end of the subpattern is reached, an option setting in  one  branch  does
       affect subsequent branches, so the above patterns match "SUNDAY" as well as "Saturday".

DUPLICATE SUBPATTERN NUMBERS

       Perl  5.10  introduced  a  feature whereby each alternative in a subpattern uses the same numbers for its
       capturing parentheses. Such a subpattern starts with (?| and is itself a  non-capturing  subpattern.  For
       example, consider this pattern:

       (?|(Sat)ur|(Sun))day

       Because the two alternatives are inside a (?| group, both sets of capturing parentheses are numbered one.
       Thus, when the pattern matches, you can look at captured  substring  number  one,  whichever  alternative
       matched.  This  construct  is  useful  when  you want to capture part, but not all, of one of a number of
       alternatives. Inside a (?| group, parentheses are numbered as usual, but the number is reset at the start
       of  each  branch. The numbers of any capturing buffers that follow the subpattern start after the highest
       number used in any branch. The following example is  taken  from  the  Perl  documentation.  The  numbers
       underneath show in which buffer the captured content will be stored.

         # before  ---------------branch-reset----------- after
         / ( a )  (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x
         # 1            2         2  3        2     3     4

       A  backreference  or  a  recursive  call  to  a numbered subpattern always refers to the first one in the
       pattern with the given number.

       An alternative approach to using this "branch reset" feature is to use duplicate  named  subpatterns,  as
       described in the next section.

NAMED SUBPATTERNS

       Identifying  capturing  parentheses  by  number  is  simple, but it can be very hard to keep track of the
       numbers in complicated regular expressions. Furthermore, if an expression is modified,  the  numbers  may
       change. To help with this difficulty, PCRE supports the naming of subpatterns. This feature was not added
       to Perl until release 5.10. Python had the feature earlier, and PCRE introduced it at release 4.0,  using
       the Python syntax. PCRE now supports both the Perl and the Python syntax.

       In  PCRE,  a  subpattern  can  be named in one of three ways: (?<name>...) or (?'name'...) as in Perl, or
       (?P<name>...) as in Python. References to capturing parentheses from other parts of the pattern, such  as
       backreferences, recursion, and conditions, can be made by name as well as by number.

       Names  consist of up to 32 alphanumeric characters and underscores. Named capturing parentheses are still
       allocated numbers as well as names, exactly as if the names were not present. The  capture  specification
       to re:run/3 can use named values if they are present in the regular expression.

       By  default,  a  name  must  be  unique  within a pattern, but it is possible to relax this constraint by
       setting the dupnames option at compile time. This can be useful for patterns where only one  instance  of
       the  named  parentheses  can match. Suppose you want to match the name of a weekday, either as a 3-letter
       abbreviation or as the full name, and in both cases you want to extract the  abbreviation.  This  pattern
       (ignoring the line breaks) does the job:

         (?<DN>Mon|Fri|Sun)(?:day)?|
         (?<DN>Tue)(?:sday)?|
         (?<DN>Wed)(?:nesday)?|
         (?<DN>Thu)(?:rsday)?|
         (?<DN>Sat)(?:urday)?

       There  are  five  capturing  substrings,  but  only one is ever set after a match. (An alternative way of
       solving this problem is to use a "branch reset" subpattern, as described in the previous section.)

       In case of capturing named subpatterns which are not  unique,  the  first  occurrence  is  returned  from
       re:exec/3, if the name is specified int the values part of the capture statement.

REPETITION

       Repetition is specified by quantifiers, which can follow any of the following items:

         * a literal data character

         * the dot metacharacter

         * the \C escape sequence

         * the \X escape sequence (in UTF-8 mode with Unicode properties)

         * the \R escape sequence

         * an escape such as \d that matches a single character

         * a character class

         * a back reference (see next section)

         * a parenthesized subpattern (unless it is an assertion)

       The  general repetition quantifier specifies a minimum and maximum number of permitted matches, by giving
       the two numbers in curly brackets (braces), separated by a comma. The numbers must be  less  than  65536,
       and the first must be less than or equal to the second. For example:

       z{2,4}

       matches  "zz",  "zzz",  or  "zzzz".  A closing brace on its own is not a special character. If the second
       number is omitted, but the comma is present, there is no upper limit; if the second number and the  comma
       are both omitted, the quantifier specifies an exact number of required matches. Thus

       [aeiou]{3,}

       matches at least 3 successive vowels, but may match many more, while

       \d{8}

       matches  exactly  8 digits. An opening curly bracket that appears in a position where a quantifier is not
       allowed, or one that does not match the syntax of a quantifier, is taken  as  a  literal  character.  For
       example, {,6} is not a quantifier, but a literal string of four characters.

       In  UTF-8 mode, quantifiers apply to UTF-8 characters rather than to individual bytes. Thus, for example,
       \x{100}{2} matches two UTF-8 characters, each of which is represented by a two-byte sequence.  Similarly,
       when Unicode property support is available, \X{3} matches three Unicode extended sequences, each of which
       may be several bytes long (and they may be of different lengths).

       The quantifier {0} is permitted, causing the expression to  behave  as  if  the  previous  item  and  the
       quantifier were not present.

       For convenience, the three most common quantifiers have single-character abbreviations:

         *:
           is equivalent to {0,}

         +:
           is equivalent to {1,}

         ?:
           is equivalent to {0,1}

       It  is possible to construct infinite loops by following a subpattern that can match no characters with a
       quantifier that has no upper limit, for example:

       (a?)*

       Earlier versions of Perl and PCRE used to give an error at  compile  time  for  such  patterns.  However,
       because  there  are cases where this can be useful, such patterns are now accepted, but if any repetition
       of the subpattern does in fact match no characters, the loop is forcibly broken.

       By default, the quantifiers are "greedy", that is, they match as much as  possible  (up  to  the  maximum
       number of permitted times), without causing the rest of the pattern to fail. The classic example of where
       this gives problems is in trying to match comments in C programs. These appear  between  /*  and  */  and
       within  the comment, individual * and / characters may appear. An attempt to match C comments by applying
       the pattern

       /\*.*\*/

       to the string

       /* first comment */ not comment /* second comment */

       fails, because it matches the entire string owing to the greediness of the .* item.

       However, if a quantifier is followed by a question mark, it ceases to be greedy, and instead matches  the
       minimum number of times possible, so the pattern

       /\*.*?\*/

       does  the  right  thing  with  the  C  comments.  The meaning of the various quantifiers is not otherwise
       changed, just the preferred number of matches. Do not confuse this use of question mark with its use as a
       quantifier in its own right. Because it has two uses, it can sometimes appear doubled, as in

       \d??\d

       which  matches one digit by preference, but can match two if that is the only way the rest of the pattern
       matches.

       If the ungreedy option is set (an option that is not available in Perl), the quantifiers are  not  greedy
       by  default,  but  individual  ones  can  be made greedy by following them with a question mark. In other
       words, it inverts the default behaviour.

       When a parenthesized subpattern is quantified with a minimum repeat count that is greater than 1 or  with
       a  limited  maximum,  more  memory is required for the compiled pattern, in proportion to the size of the
       minimum or maximum.

       If a pattern starts with .* or .{0,} and the dotall  option  (equivalent  to  Perl's  /s)  is  set,  thus
       allowing  the dot to match newlines, the pattern is implicitly anchored, because whatever follows will be
       tried against every character position in the subject string, so  there  is  no  point  in  retrying  the
       overall  match  at  any  position  after the first. PCRE normally treats such a pattern as though it were
       preceded by \A.

       In cases where it is known that the subject string contains no newlines, it is worth  setting  dotall  in
       order to obtain this optimization, or alternatively using ^ to indicate anchoring explicitly.

       However,  there  is  one  situation  where  the  optimization cannot be used. When .* is inside capturing
       parentheses that are the subject of a backreference elsewhere in the pattern, a match at  the  start  may
       fail where a later one succeeds. Consider, for example:

       (.*)abc\1

       If the subject is "xyz123abc123" the match point is the fourth character. For this reason, such a pattern
       is not implicitly anchored.

       When a capturing subpattern is repeated, the value captured is  the  substring  that  matched  the  final
       iteration. For example, after

       (tweedle[dume]{3}\s*)+

       has  matched  "tweedledum  tweedledee"  the  value of the captured substring is "tweedledee". However, if
       there are nested capturing subpatterns, the corresponding captured values may have been set  in  previous
       iterations. For example, after

       /(a|(b))+/

       matches "aba" the value of the second captured substring is "b".

ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS

       With both maximizing ("greedy") and minimizing ("ungreedy" or "lazy") repetition, failure of what follows
       normally causes the repeated item to be re-evaluated to see if a different number of repeats  allows  the
       rest  of the pattern to match. Sometimes it is useful to prevent this, either to change the nature of the
       match, or to cause it fail earlier than it otherwise might, when the author of the pattern knows there is
       no point in carrying on.

       Consider, for example, the pattern \d+foo when applied to the subject line

       123456bar

       After  matching  all 6 digits and then failing to match "foo", the normal action of the matcher is to try
       again with only 5 digits matching the \d+ item, and then with 4, and so on,  before  ultimately  failing.
       "Atomic grouping" (a term taken from Jeffrey Friedl's book) provides the means for specifying that once a
       subpattern has matched, it is not to be re-evaluated in this way.

       If we use atomic grouping for the previous example, the matcher gives up immediately on failing to  match
       "foo"  the  first  time.  The  notation  is  a  kind of special parenthesis, starting with (?> as in this
       example:

       (?>\d+)foo

       This kind of parenthesis "locks up" the part of the pattern it  contains  once  it  has  matched,  and  a
       failure further into the pattern is prevented from backtracking into it. Backtracking past it to previous
       items, however, works as normal.

       An alternative description is that a subpattern of this type matches the string  of  characters  that  an
       identical standalone pattern would match, if anchored at the current point in the subject string.

       Atomic  grouping subpatterns are not capturing subpatterns. Simple cases such as the above example can be
       thought of as a maximizing repeat that must swallow everything it can. So, while both \d+  and  \d+?  are
       prepared  to  adjust  the  number  of  digits  they match in order to make the rest of the pattern match,
       (?>\d+) can only match an entire sequence of digits.

       Atomic groups in general can of course contain arbitrarily complicated subpatterns, and  can  be  nested.
       However, when the subpattern for an atomic group is just a single repeated item, as in the example above,
       a simpler notation, called a "possessive quantifier" can be  used.  This  consists  of  an  additional  +
       character following a quantifier. Using this notation, the previous example can be rewritten as

       \d++foo

       Note that a possessive quantifier can be used with an entire group, for example:

       (abc|xyz){2,3}+

       Possessive  quantifiers  are  always  greedy;  the  setting of the ungreedy option is ignored. They are a
       convenient notation for the simpler forms of atomic group. However, there is no difference in the meaning
       of a possessive quantifier and the equivalent atomic group, though there may be a performance difference;
       possessive quantifiers should be slightly faster.

       The possessive quantifier syntax is an extension to the Perl 5.8 syntax. Jeffrey  Friedl  originated  the
       idea  (and the name) in the first edition of his book. Mike McCloskey liked it, so implemented it when he
       built Sun's Java package, and PCRE copied it from there. It ultimately found its way into Perl at release
       5.10.

       PCRE  has  an  optimization  that  automatically  "possessifies"  certain  simple pattern constructs. For
       example, the sequence A+B is treated as A++B because there is no point in backtracking into a sequence of
       A's when B must follow.

       When  a pattern contains an unlimited repeat inside a subpattern that can itself be repeated an unlimited
       number of times, the use of an atomic group is the only way to avoid some failing matches taking  a  very
       long time indeed. The pattern

       (\D+|<\d+>)*[!?]

       matches  an  unlimited  number of substrings that either consist of non-digits, or digits enclosed in <>,
       followed by either ! or ?. When it matches, it runs quickly. However, if it is applied to

       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

       it takes a long time before reporting failure. This is because the string  can  be  divided  between  the
       internal  \D+  repeat and the external * repeat in a large number of ways, and all have to be tried. (The
       example uses [!?] rather than a single character  at  the  end,  because  both  PCRE  and  Perl  have  an
       optimization  that allows for fast failure when a single character is used. They remember the last single
       character that is required for a match, and fail early if it is  not  present  in  the  string.)  If  the
       pattern is changed so that it uses an atomic group, like this:

       ((?>\D+)|<\d+>)*[!?]

       sequences of non-digits cannot be broken, and failure happens quickly.

BACK REFERENCES

       Outside  a  character class, a backslash followed by a digit greater than 0 (and possibly further digits)
       is a back reference to a capturing subpattern earlier (that is, to its left)  in  the  pattern,  provided
       there have been that many previous capturing left parentheses.

       However,  if  the  decimal  number  following the backslash is less than 10, it is always taken as a back
       reference, and causes an error only if there are not that many capturing left parentheses in  the  entire
       pattern. In other words, the parentheses that are referenced need not be to the left of the reference for
       numbers less than 10. A "forward back reference" of this  type  can  make  sense  when  a  repetition  is
       involved and the subpattern to the right has participated in an earlier iteration.

       It  is  not  possible  to have a numerical "forward back reference" to a subpattern whose number is 10 or
       more using this syntax because a sequence such as \50 is interpreted as a character defined in octal. See
       the  subsection  entitled  "Non-printing  characters" above for further details of the handling of digits
       following a backslash. There is no such problem when named parentheses are used. A back reference to  any
       subpattern is possible using named parentheses (see below).

       Another  way  of avoiding the ambiguity inherent in the use of digits following a backslash is to use the
       \g escape sequence, which is a feature introduced in Perl 5.10.  This  escape  must  be  followed  by  an
       unsigned number or a negative number, optionally enclosed in braces. These examples are all identical:

         * (ring), \1

         * (ring), \g1

         * (ring), \g{1}

       An  unsigned  number  specifies  an absolute reference without the ambiguity that is present in the older
       syntax. It is also useful when literal digits follow the reference.  A  negative  number  is  a  relative
       reference. Consider this example:

       (abc(def)ghi)\g{-1}

       The  sequence \g{-1} is a reference to the most recently started capturing subpattern before \g, that is,
       is it equivalent to \2. Similarly, \g{-2} would be equivalent to \1. The use of relative  references  can
       be  helpful  in  long  patterns, and also in patterns that are created by joining together fragments that
       contain references within themselves.

       A back reference matches whatever actually matched  the  capturing  subpattern  in  the  current  subject
       string, rather than anything matching the subpattern itself (see "Subpatterns as subroutines" below for a
       way of doing that). So the pattern

       (sens|respons)e and \1ibility

       matches "sense and sensibility" and "response and responsibility", but not "sense and responsibility". If
       caseful  matching  is  in  force  at the time of the back reference, the case of letters is relevant. For
       example,

       ((?i)rah)\s+\1

       matches "rah rah" and "RAH RAH", but not "RAH rah", even though  the  original  capturing  subpattern  is
       matched caselessly.

       There  are  several  different  ways  of  writing  back  references to named subpatterns. The .NET syntax
       \k{name} and the Perl syntax \k<name> or \k'name' are supported, as is the Python syntax (?P=name).  Perl
       5.10's  unified  back reference syntax, in which \g can be used for both numeric and named references, is
       also supported. We could rewrite the above example in any of the following ways:

         * (?<p1>(?i)rah)\s+\k<p1>

         * (?'p1'(?i)rah)\s+\k{p1}

         * (?P<p1>(?i)rah)\s+(?P=p1)

         * (?<p1>(?i)rah)\s+\g{p1}

       A subpattern that is referenced by name may appear in the pattern before or after the reference.

       There may be more than one back reference to the same subpattern. If a subpattern has not  actually  been
       used in a particular match, any back references to it always fail. For example, the pattern

       (a|(bc))\2

       always  fails if it starts to match "a" rather than "bc". Because there may be many capturing parentheses
       in a pattern, all digits following the backslash are taken as part of a potential back reference  number.
       If  the  pattern  continues  with  a  digit  character, some delimiter must be used to terminate the back
       reference. If the extended option is set, this  can  be  whitespace.  Otherwise  an  empty  comment  (see
       "Comments" below) can be used.

       A back reference that occurs inside the parentheses to which it refers fails when the subpattern is first
       used, so, for example, (a\1) never matches. However,  such  references  can  be  useful  inside  repeated
       subpatterns. For example, the pattern

       (a|b\1)+

       matches  any  number of "a"s and also "aba", "ababbaa" etc. At each iteration of the subpattern, the back
       reference matches the character string corresponding to the previous iteration.  In  order  for  this  to
       work,  the  pattern must be such that the first iteration does not need to match the back reference. This
       can be done using alternation, as in the example above, or by a quantifier with a minimum of zero.

ASSERTIONS

       An assertion is a test on the characters following or preceding the current matching point that does  not
       actually  consume  any  characters.  The  simple  assertions coded as \b, \B, \A, \G, \Z, \z, ^ and $ are
       described above.

       More complicated assertions are coded as subpatterns. There are two kinds: those that look ahead  of  the
       current position in the subject string, and those that look behind it. An assertion subpattern is matched
       in the normal way, except that it does not cause the current matching position to be changed.

       Assertion subpatterns are not capturing subpatterns, and may not be repeated, because it makes  no  sense
       to  assert  the  same thing several times. If any kind of assertion contains capturing subpatterns within
       it, these are counted for the purposes of numbering the  capturing  subpatterns  in  the  whole  pattern.
       However,  substring capturing is carried out only for positive assertions, because it does not make sense
       for negative assertions.

       Lookahead assertions

       Lookahead assertions start with (?= for positive assertions and (?! for negative assertions. For example,

       \w+(?=;)

       matches a word followed by a semicolon, but does not include the semicolon in the match, and

       foo(?!bar)

       matches any occurrence of "foo" that is not followed by "bar". Note that the apparently similar pattern

       (?!foo)bar

       does not find an occurrence of "bar" that is preceded  by  something  other  than  "foo";  it  finds  any
       occurrence  of  "bar"  whatsoever,  because  the  assertion  (?!foo)  is  always true when the next three
       characters are "bar". A lookbehind assertion is needed to achieve the other effect.

       If you want to force a matching failure at some point in a pattern, the most convenient way to do  it  is
       with  (?!) because an empty string always matches, so an assertion that requires there not to be an empty
       string must always fail.

       Lookbehind assertions

       Lookbehind assertions start with (?<= for positive assertions  and  (?<!  for  negative  assertions.  For
       example,

       (?<!foo)bar

       does  find  an  occurrence of "bar" that is not preceded by "foo". The contents of a lookbehind assertion
       are restricted such that all the strings it matches must have a  fixed  length.  However,  if  there  are
       several top-level alternatives, they do not all have to have the same fixed length. Thus

       (?<=bullock|donkey)

       is permitted, but

       (?<!dogs?|cats?)

       causes  an  error at compile time. Branches that match different length strings are permitted only at the
       top level of a lookbehind assertion. This is an extension compared with Perl (at least  for  5.8),  which
       requires all branches to match the same length of string. An assertion such as

       (?<=ab(c|de))

       is  not  permitted,  because  its  single  top-level  branch  can  match two different lengths, but it is
       acceptable if rewritten to use two top-level branches:

       (?<=abc|abde)

       In some cases, the Perl 5.10 escape sequence  \K  (see  above)  can  be  used  instead  of  a  lookbehind
       assertion; this is not restricted to a fixed-length.

       The  implementation  of  lookbehind  assertions is, for each alternative, to temporarily move the current
       position back by the fixed length and then try to match. If there are insufficient characters before  the
       current position, the assertion fails.

       PCRE  does  not  allow  the \C escape (which matches a single byte in UTF-8 mode) to appear in lookbehind
       assertions, because it makes it impossible to calculate the length of  the  lookbehind.  The  \X  and  \R
       escapes, which can match different numbers of bytes, are also not permitted.

       Possessive  quantifiers  can  be  used  in  conjunction  with  lookbehind assertions to specify efficient
       matching at the end of the subject string. Consider a simple pattern such as

       abcd$

       when applied to a long string that does not match. Because matching proceeds from  left  to  right,  PCRE
       will  look  for  each "a" in the subject and then see if what follows matches the rest of the pattern. If
       the pattern is specified as

       ^.*abcd$

       the initial .* matches the entire string at first, but when this fails (because  there  is  no  following
       "a"), it backtracks to match all but the last character, then all but the last two characters, and so on.
       Once again the search for "a" covers the entire string, from right to left, so  we  are  no  better  off.
       However, if the pattern is written as

       ^.*+(?<=abcd)

       there  can  be  no  backtracking  for  the  .*+ item; it can match only the entire string. The subsequent
       lookbehind assertion does a single test on the last  four  characters.  If  it  fails,  the  match  fails
       immediately. For long strings, this approach makes a significant difference to the processing time.

       Using multiple assertions

       Several assertions (of any sort) may occur in succession. For example,

       (?<=\d{3})(?<!999)foo

       matches  "foo" preceded by three digits that are not "999". Notice that each of the assertions is applied
       independently at the same point in the subject string. First there is a check  that  the  previous  three
       characters  are  all digits, and then there is a check that the same three characters are not "999". This
       pattern does not match "foo" preceded by six characters, the first of which are digits and the last three
       of which are not "999". For example, it doesn't match "123abcfoo". A pattern to do that is

       (?<=\d{3}...)(?<!999)foo

       This  time  the  first assertion looks at the preceding six characters, checking that the first three are
       digits, and then the second assertion checks that the preceding three characters are not "999".

       Assertions can be nested in any combination. For example,

       (?<=(?<!foo)bar)baz

       matches an occurrence of "baz" that is preceded by "bar" which in turn is not preceded by "foo", while

       (?<=\d{3}(?!999)...)foo

       is another pattern that matches "foo" preceded by three digits and any  three  characters  that  are  not
       "999".

CONDITIONAL SUBPATTERNS

       It  is possible to cause the matching process to obey a subpattern conditionally or to choose between two
       alternative subpatterns, depending on the result  of  an  assertion,  or  whether  a  previous  capturing
       subpattern matched or not. The two possible forms of conditional subpattern are

         * (?(condition)yes-pattern)

         * (?(condition)yes-pattern|no-pattern)

       If the condition is satisfied, the yes-pattern is used; otherwise the no-pattern (if present) is used. If
       there are more than two alternatives in the subpattern, a compile-time error occurs.

       There are four kinds of condition: references to subpatterns, references to recursion, a pseudo-condition
       called DEFINE, and assertions.

       Checking for a used subpattern by number

       If  the  text  between  the  parentheses  consists  of a sequence of digits, the condition is true if the
       capturing subpattern of that number has previously matched. An alternative notation  is  to  precede  the
       digits  with  a plus or minus sign. In this case, the subpattern number is relative rather than absolute.
       The most recently opened parentheses can be referenced by (?(-1), the next most recent by (?(-2), and  so
       on.  In  looping  constructs it can also make sense to refer to subsequent groups with constructs such as
       (?(+2).

       Consider the following pattern, which contains  non-significant  whitespace  to  make  it  more  readable
       (assume the extended option) and to divide it into three parts for ease of discussion:

       ( \( )? [^()]+ (?(1) \) )

       The  first part matches an optional opening parenthesis, and if that character is present, sets it as the
       first captured substring. The second part matches one or more characters that are  not  parentheses.  The
       third part is a conditional subpattern that tests whether the first set of parentheses matched or not. If
       they did, that is, if subject started with an opening parenthesis, the condition is true, and so the yes-
       pattern  is  executed  and a closing parenthesis is required. Otherwise, since no-pattern is not present,
       the subpattern matches nothing. In other words, this  pattern  matches  a  sequence  of  non-parentheses,
       optionally enclosed in parentheses.

       If you were embedding this pattern in a larger one, you could use a relative reference:

       ...other stuff... ( \( )? [^()]+ (?(-1) \) ) ...

       This makes the fragment independent of the parentheses in the larger pattern.

       Checking for a used subpattern by name

       Perl  uses  the  syntax  (?(<name>)...)  or  (?('name')...)  to  test  for a used subpattern by name. For
       compatibility with earlier versions of PCRE, which had this facility before Perl, the syntax (?(name)...)
       is also recognized. However, there is a possible ambiguity with this syntax, because subpattern names may
       consist entirely of digits. PCRE looks first for a named subpattern; if it cannot find one and  the  name
       consists entirely of digits, PCRE looks for a subpattern of that number, which must be greater than zero.
       Using subpattern names that consist entirely of digits is not recommended.

       Rewriting the above example to use a named subpattern gives this:

       (?<OPEN> \( )? [^()]+ (?(<OPEN>) \) )

       Checking for pattern recursion

       If the condition is the string (R), and there is no subpattern with the name R, the condition is true  if
       a  recursive  call  to the whole pattern or any subpattern has been made. If digits or a name preceded by
       ampersand follow the letter R, for example:

       (?(R3)...) or (?(R&name)...)

       the condition is true if the most recent recursion is into the subpattern whose number or name is  given.
       This condition does not check the entire recursion stack.

       At "top level", all these recursion test conditions are false. Recursive patterns are described below.

       Defining subpatterns for use by reference only

       If  the  condition is the string (DEFINE), and there is no subpattern with the name DEFINE, the condition
       is always false. In this case, there may be only one alternative in the subpattern. It is always  skipped
       if  control  reaches  this  point  in  the  pattern;  the idea of DEFINE is that it can be used to define
       "subroutines" that can be referenced from elsewhere. (The use of "subroutines" is described  below.)  For
       example,  a  pattern  to  match  an  IPv4  address could be written like this (ignore whitespace and line
       breaks):

       (?(DEFINE) (?<byte> 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) ) \b (?&byte) (\.(?&byte)){3} \b

       The first part of the pattern is a DEFINE group inside which a another group  named  "byte"  is  defined.
       This  matches  an  individual  component of an IPv4 address (a number less than 256). When matching takes
       place, this part of the pattern is skipped because DEFINE acts like a false condition.

       The rest of the pattern uses references to the named group to match the four dot-separated components  of
       an IPv4 address, insisting on a word boundary at each end.

       Assertion conditions

       If  the  condition is not in any of the above formats, it must be an assertion. This may be a positive or
       negative lookahead or lookbehind assertion.  Consider  this  pattern,  again  containing  non-significant
       whitespace, and with the two alternatives on the second line:

         (?(?=[^a-z]*[a-z])
         \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} )

       The condition is a positive lookahead assertion that matches an optional sequence of non-letters followed
       by a letter. In other words, it tests for the presence of at least one letter in the subject. If a letter
       is  found,  the  subject  is  matched  against the first alternative; otherwise it is matched against the
       second. This pattern matches strings in one of the two forms dd-aaa-dd or dd-dd-dd, where aaa are letters
       and dd are digits.

COMMENTS

       The  sequence  (?# marks the start of a comment that continues up to the next closing parenthesis. Nested
       parentheses are not permitted. The characters that make up a comment play no part in the pattern matching
       at all.

       If  the  extended  option is set, an unescaped # character outside a character class introduces a comment
       that continues to immediately after the next newline in the pattern.

RECURSIVE PATTERNS

       Consider the problem of matching a string in parentheses,  allowing  for  unlimited  nested  parentheses.
       Without the use of recursion, the best that can be done is to use a pattern that matches up to some fixed
       depth of nesting. It is not possible to handle an arbitrary nesting depth.

       For some time, Perl has provided a facility that allows regular expressions  to  recurse  (amongst  other
       things). It does this by interpolating Perl code in the expression at run time, and the code can refer to
       the expression itself. A Perl pattern using code interpolation to solve the parentheses  problem  can  be
       created like this:

       $re = qr{\( (?: (?>[^()]+) | (?p{$re}) )* \)}x;

       The (?p{...}) item interpolates Perl code at run time, and in this case refers recursively to the pattern
       in which it appears.

       Obviously, PCRE cannot support the interpolation of Perl code. Instead, it supports  special  syntax  for
       recursion  of the entire pattern, and also for individual subpattern recursion. After its introduction in
       PCRE and Python, this kind of recursion was introduced into Perl at release 5.10.

       A special item that consists of (? followed by a number greater than zero and a closing parenthesis is  a
       recursive call of the subpattern of the given number, provided that it occurs inside that subpattern. (If
       not, it is a "subroutine" call, which is described in the next section.) The special item (?R) or (?0) is
       a recursive call of the entire regular expression.

       In PCRE (like Python, but unlike Perl), a recursive subpattern call is always treated as an atomic group.
       That is, once it has matched some of the subject string, it is never  re-entered,  even  if  it  contains
       untried alternatives and there is a subsequent matching failure.

       This  PCRE  pattern  solves  the  nested  parentheses  problem (assume the extended option is set so that
       whitespace is ignored):

       \( ( (?>[^()]+) | (?R) )* \)

       First it matches an opening parenthesis. Then it matches any number of substrings which can either  be  a
       sequence  of  non-parentheses,  or  a  recursive  match  of  the  pattern  itself  (that  is, a correctly
       parenthesized substring). Finally there is a closing parenthesis.

       If this were part of a larger pattern, you would not want to recurse the entire pattern, so  instead  you
       could use this:

       ( \( ( (?>[^()]+) | (?1) )* \) )

       We  have put the pattern into parentheses, and caused the recursion to refer to them instead of the whole
       pattern.

       In a larger pattern, keeping track of parenthesis numbers can be tricky. This is made easier by  the  use
       of  relative  references. (A Perl 5.10 feature.) Instead of (?1) in the pattern above you can write (?-2)
       to refer to the second most recently opened parentheses  preceding  the  recursion.  In  other  words,  a
       negative number counts capturing parentheses leftwards from the point at which it is encountered.

       It  is  also  possible  to refer to subsequently opened parentheses, by writing references such as (?+2).
       However, these cannot be recursive  because  the  reference  is  not  inside  the  parentheses  that  are
       referenced. They are always "subroutine" calls, as described in the next section.

       An alternative approach is to use named parentheses instead. The Perl syntax for this is (?&name); PCRE's
       earlier syntax (?P>name) is also supported. We could rewrite the above example as follows:

       (?<pn> \( ( (?>[^()]+) | (?&pn) )* \) )

       If there is more than one subpattern with the same name, the earliest one is used.

       This particular example pattern that we have been looking at contains nested unlimited  repeats,  and  so
       the use of atomic grouping for matching strings of non-parentheses is important when applying the pattern
       to strings that do not match. For example, when this pattern is applied to

       (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()

       it yields "no match" quickly. However, if atomic grouping is not used, the match runs  for  a  very  long
       time  indeed  because  there are so many different ways the + and * repeats can carve up the subject, and
       all have to be tested before failure can be reported.

       At the end of a match, the values set for any capturing subpatterns are those from the outermost level of
       the recursion at which the subpattern value is set. If the pattern above is matched against

       (ab(cd)ef)

       the  value  for  the capturing parentheses is "ef", which is the last value taken on at the top level. If
       additional parentheses are added, giving

         \( ( ( (?>[^()]+) | (?R) )* ) \)
            ^                        ^
            ^                        ^

       the string they capture is "ab(cd)ef", the contents of the top level parentheses.

       Do not confuse the (?R) item with the condition (R), which tests for recursion.  Consider  this  pattern,
       which  matches  text in angle brackets, allowing for arbitrary nesting. Only digits are allowed in nested
       brackets (that is, when recursing), whereas any characters are permitted at the outer level.

       < (?: (?(R) \d++ | [^<>]*+) | (?R)) * >

       In this pattern, (?(R) is the start of a conditional subpattern, with two different alternatives for  the
       recursive and non-recursive cases. The (?R) item is the actual recursive call.

SUBPATTERNS AS SUBROUTINES

       If  the  syntax  for  a  recursive subpattern reference (either by number or by name) is used outside the
       parentheses to which it refers, it operates like a subroutine in a  programming  language.  The  "called"
       subpattern  may  be  defined  before  or  after  the  reference.  A numbered reference can be absolute or
       relative, as in these examples:

         * (...(absolute)...)...(?2)...

         * (...(relative)...)...(?-1)...

         * (...(?+1)...(relative)...

       An earlier example pointed out that the pattern

       (sens|respons)e and \1ibility

       matches "sense and sensibility" and "response and responsibility", but not "sense and responsibility". If
       instead the pattern

       (sens|respons)e and (?1)ibility

       is  used,  it  does match "sense and responsibility" as well as the other two strings. Another example is
       given in the discussion of DEFINE above.

       Like recursive subpatterns, a "subroutine" call is always treated as an atomic group. That  is,  once  it
       has  matched some of the subject string, it is never re-entered, even if it contains untried alternatives
       and there is a subsequent matching failure.

       When a subpattern is used as a subroutine, processing options such as case-independence  are  fixed  when
       the  subpattern  is  defined.  They  cannot  be  changed  for different calls. For example, consider this
       pattern:

       (abc)(?i:(?-1))

       It matches "abcabc". It does not match "abcABC" because the change of processing option does  not  affect
       the called subpattern.

BACKTRACKING CONTROL

       Perl  5.10  introduced  a number of "Special Backtracking Control Verbs", which are described in the Perl
       documentation as "experimental and subject to change or removal in a future version of Perl". It goes  on
       to  say:  "Their  usage  in  production code should be noted to avoid problems during upgrades." The same
       remarks apply to the PCRE features described in this section.

       The new verbs make use of what was previously invalid syntax:  an  opening  parenthesis  followed  by  an
       asterisk.  In  Perl,  they  are  generally  of  the form (*VERB:ARG) but PCRE does not support the use of
       arguments, so its general form is just (*VERB). Any number of these verbs may occur in a  pattern.  There
       are two kinds:

       Verbs that act immediately

       The following verbs act as soon as they are encountered:

       (*ACCEPT)

       This  verb  causes  the  match  to end successfully, skipping the remainder of the pattern. When inside a
       recursion, only the innermost pattern is ended immediately. PCRE differs from Perl in what happens if the
       (*ACCEPT)  is  inside  capturing  parentheses.  In  Perl, the data so far is captured: in PCRE no data is
       captured. For example:

       A(A|B(*ACCEPT)|C)D

       This matches "AB", "AAD", or "ACD", but when it matches "AB", no data is captured.

       (*FAIL) or (*F)

       This verb causes the match to fail, forcing backtracking to occur. It is equivalent to (?!) but easier to
       read.  The  Perl  documentation notes that it is probably useful only when combined with (?{}) or (??{}).
       Those are, of course, Perl features that are not present in PCRE. The nearest equivalent is  the  callout
       feature, as for example in this pattern:

       a+(?C)(*FAIL)

       A  match  with the string "aaaa" always fails, but the callout is taken before each backtrack happens (in
       this example, 10 times).

       Verbs that act after backtracking

       The following verbs do nothing when they are encountered. Matching continues with what  follows,  but  if
       there  is  no  subsequent  match,  a  failure is forced. The verbs differ in exactly what kind of failure
       occurs.

       (*COMMIT)

       This verb causes the whole match to fail outright if the rest of the pattern does not match. Even if  the
       pattern  is unanchored, no further attempts to find a match by advancing the start point take place. Once
       (*COMMIT) has been passed, re:run/3 is committed to finding a match at the current starting point, or not
       at all. For example:

       a+(*COMMIT)b

       This  matches  "xxaab"  but  not  "aacaab".  It  can  be thought of as a kind of dynamic anchor, or "I've
       started, so I must finish."

       (*PRUNE)

       This verb causes the match to fail at the current position if the rest of the pattern does not match.  If
       the  pattern  is  unanchored, the normal "bumpalong" advance to the next starting character then happens.
       Backtracking can occur as usual to the left of (*PRUNE), or when matching to the right of  (*PRUNE),  but
       if  there  is  no  match  to  the  right, backtracking cannot cross (*PRUNE). In simple cases, the use of
       (*PRUNE) is just an alternative to an atomic group or possessive quantifier, but there are some  uses  of
       (*PRUNE) that cannot be expressed in any other way.

       (*SKIP)

       This  verb  is like (*PRUNE), except that if the pattern is unanchored, the "bumpalong" advance is not to
       the next character, but to the position in the subject where (*SKIP) was encountered.  (*SKIP)  signifies
       that whatever text was matched leading up to it cannot be part of a successful match. Consider:

       a+(*SKIP)b

       If the subject is "aaaac...", after the first match attempt fails (starting at the first character in the
       string), the starting point skips on to start the next attempt at "c". Note that a possessive  quantifier
       does  not  have the same effect in this example; although it would suppress backtracking during the first
       match attempt, the second attempt would start at the second character instead of skipping on to "c".

       (*THEN)

       This verb causes a skip to the next alternation if the rest of the pattern does not match.  That  is,  it
       cancels  pending  backtracking,  but  only  within  the  current  alternation.  Its  name  comes from the
       observation that it can be used for a pattern-based if-then-else block:

       ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...

       If the COND1 pattern matches, FOO is tried (and possibly further items after the end of the group if  FOO
       succeeds);  on  failure the matcher skips to the second alternative and tries COND2, without backtracking
       into COND1. If (*THEN) is used outside of any alternation, it acts exactly like (*PRUNE).