This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Change perlgpl.pod to GPL 1 to match README
[perl5.git] / pod / perlre.pod
index 794a512..40e6c28 100644 (file)
@@ -41,7 +41,7 @@ X<regular expression, single-line>
 Treat string as single line.  That is, change "." to match any character
 whatsoever, even a newline, which normally it would not match.
 
-Used together, as /ms, they let the "." match any character whatsoever,
+Used together, as C</ms>, they let the "." match any character whatsoever,
 while still allowing "^" and "$" to match, respectively, just after
 and just before newlines within the string.
 
@@ -82,20 +82,30 @@ modifiers may also be embedded within the regular expression itself using
 the C<(?...)> construct.  See below.
 
 The C</x> modifier itself needs a little more explanation.  It tells
-the regular expression parser to ignore whitespace that is neither
+the regular expression parser to ignore most whitespace that is neither
 backslashed nor within a character class.  You can use this to break up
 your regular expression into (slightly) more readable parts.  The C<#>
 character is also treated as a metacharacter introducing a comment,
 just as in ordinary Perl code.  This also means that if you want real
 whitespace or C<#> characters in the pattern (outside a character
 class, where they are unaffected by C</x>), then you'll either have to
-escape them (using backslashes or C<\Q...\E>) or encode them using octal
-or hex escapes.  Taken together, these features go a long way towards
+escape them (using backslashes or C<\Q...\E>) or encode them using octal,
+hex, or C<\N{}> escapes.  Taken together, these features go a long way towards
 making Perl's regular expressions more readable.  Note that you have to
 be careful not to include the pattern delimiter in the comment--perl has
 no way of knowing you did not intend to close the pattern early.  See
 the C-comment deletion code in L<perlop>.  Also note that anything inside
-a C<\Q...\E> stays unaffected by C</x>.
+a C<\Q...\E> stays unaffected by C</x>.  And note that C</x> doesn't affect
+whether space interpretation within a single multi-character construct.  For
+example in C<\x{...}>, regardless of the C</x> modifier, there can be no
+spaces.  Same for a L<quantifier|/Quantifiers> such as C<{3}> or
+C<{5,}>.  Similarly, C<(?:...)> can't have a space between the C<?> and C<:>,
+but can between the C<(> and C<?>.  Within any delimiters for such a
+construct, allowed spaces are not affected by C</x>, and depend on the
+construct.  For example, C<\x{...}> can't have spaces because hexadecimal
+numbers don't have spaces in them.  But, Unicode properties can have spaces, so
+in C<\p{...}>  there can be spaces that follow the Unicode rules, for which see
+L<perluniprops/Properties accessible through \p{} and \P{}>.
 X</x>
 
 =head2 Regular Expressions
@@ -120,7 +130,7 @@ X<\> X<^> X<.> X<$> X<|> X<(> X<()> X<[> X<[]>
     $  Match the end of the line (or before newline at the end)
     |  Alternation
     () Grouping
-    [] Character class
+    [] Bracketed Character class
 
 By default, the "^" character is guaranteed to match only the
 beginning of the string, the "$" character only the end (or before the
@@ -156,7 +166,7 @@ X<metacharacter> X<quantifier> X<*> X<+> X<?> X<{n}> X<{n,}> X<{n,m}>
 as a regular character.  In particular, the lower bound
 is not optional.)  The "*" quantifier is equivalent to C<{0,}>, the "+"
 quantifier to C<{1,}>, and the "?" quantifier to C<{0,1}>.  n and m are limited
-to integral values less than a preset limit defined when perl is built.
+to non-negative integral values less than a preset limit defined when perl is built.
 This is usually 32766 on the most common platforms.  The actual limit can
 be seen in the error message generated by code such as this:
 
@@ -212,8 +222,6 @@ instance the above example could also be written as follows:
 
 Because patterns are processed as double quoted strings, the following
 also work:
-X<\t> X<\n> X<\r> X<\f> X<\e> X<\a> X<\l> X<\u> X<\L> X<\U> X<\E> X<\Q>
-X<\0> X<\c> X<\N> X<\x>
 
     \t         tab                   (HT, TAB)
     \n         newline               (LF, NL)
@@ -226,220 +234,94 @@ X<\0> X<\c> X<\N> X<\x>
     \x{263a}   long hex char         (example: Unicode SMILEY)
     \cK                control char          (example: VT)
     \N{name}   named Unicode character
+    \N{U+263D} Unicode character     (example: FIRST QUARTER MOON)
     \l         lowercase next char (think vi)
     \u         uppercase next char (think vi)
     \L         lowercase till \E (think vi)
     \U         uppercase till \E (think vi)
-    \E         end case modification (think vi)
     \Q         quote (disable) pattern metacharacters till \E
+    \E         end either case modification or quoted section (think vi)
 
-If C<use locale> is in effect, the case map used by C<\l>, C<\L>, C<\u>
-and C<\U> is taken from the current locale.  See L<perllocale>.  For
-documentation of C<\N{name}>, see L<charnames>.
-
-You cannot include a literal C<$> or C<@> within a C<\Q> sequence.
-An unescaped C<$> or C<@> interpolates the corresponding variable,
-while escaping will cause the literal string C<\$> to be matched.
-You'll need to write something like C<m/\Quser\E\@\Qhost/>.
+Details are in L<perlop/Quote and Quote-like Operators>.
 
 =head3 Character Classes and other Special Escapes
 
 In addition, Perl defines the following:
-X<\w> X<\W> X<\s> X<\S> X<\d> X<\D> X<\X> X<\p> X<\P> X<\C>
-X<\g> X<\k> X<\N> X<\K> X<\v> X<\V> X<\h> X<\H>
-X<word> X<whitespace> X<character class> X<backreference>
-
-    \w      Match a "word" character (alphanumeric plus "_")
-    \W      Match a non-"word" character
-    \s      Match a whitespace character
-    \S      Match a non-whitespace character
-    \d      Match a digit character
-    \D      Match a non-digit character
-    \pP             Match P, named property.  Use \p{Prop} for longer names.
-    \PP             Match non-P
-    \X      Match eXtended Unicode "combining character sequence",
-             equivalent to (?>\PM\pM*)
-    \C      Match a single C char (octet) even under Unicode.
-            NOTE: breaks up characters into their UTF-8 bytes,
-            so you may end up with malformed pieces of UTF-8.
-            Unsupported in lookbehind.
-    \1       Backreference to a specific group.
-            '1' may actually be any positive integer.
-    \g1      Backreference to a specific or previous group,
-    \g{-1}   number may be negative indicating a previous buffer and may
-             optionally be wrapped in curly brackets for safer parsing.
-    \g{name} Named backreference
-    \k<name> Named backreference
-    \K       Keep the stuff left of the \K, don't include it in $&
-    \N       Any character but \n
-    \v       Vertical whitespace
-    \V       Not vertical whitespace
-    \h       Horizontal whitespace
-    \H       Not horizontal whitespace
-    \R       Linebreak
-
-A C<\w> matches a single alphanumeric character (an alphabetic
-character, or a decimal digit) or C<_>, not a whole word.  Use C<\w+>
-to match a string of Perl-identifier characters (which isn't the same
-as matching an English word).  If C<use locale> is in effect, the list
-of alphabetic characters generated by C<\w> is taken from the current
-locale.  See L<perllocale>.  You may use C<\w>, C<\W>, C<\s>, C<\S>,
-C<\d>, and C<\D> within character classes, but they aren't usable
-as either end of a range. If any of them precedes or follows a "-",
-the "-" is understood literally. If Unicode is in effect, C<\s> matches
-also "\x{85}", "\x{2028}", and "\x{2029}". See L<perlunicode> for more
-details about C<\pP>, C<\PP>, C<\X> and the possibility of defining
-your own C<\p> and C<\P> properties, and L<perluniintro> about Unicode
-in general.
-X<\w> X<\W> X<word>
-
-C<\R> will atomically match a linebreak, including the network line-ending
-"\x0D\x0A".  Specifically, X<\R> is exactly equivalent to
-
-  (?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}])
-
-B<Note:> C<\R> has no special meaning inside of a character class;
-use C<\v> instead (vertical whitespace).
-X<\R>
-
-The POSIX character class syntax
-X<character class>
-
-    [:class:]
-
-is also available.  Note that the C<[> and C<]> brackets are I<literal>;
-they must always be used within a character class expression.
-
-    # this is correct:
-    $string =~ /[[:alpha:]]/;
-
-    # this is not, and will generate a warning:
-    $string =~ /[:alpha:]/;
-
-The following table shows the mapping of POSIX character class
-names, common escapes, literal escape sequences and their equivalent
-Unicode style property names.
-X<character class> X<\p> X<\p{}>
-X<alpha> X<alnum> X<ascii> X<blank> X<cntrl> X<digit> X<graph>
-X<lower> X<print> X<punct> X<space> X<upper> X<word> X<xdigit>
-
-B<Note:> up to Perl 5.10 the property names used were shared with
-standard Unicode properties, this was changed in Perl 5.11, see
-L<perl5110delta> for details.
-
-    POSIX  Esc  Class               Property           Note
-    --------------------------------------------------------
-    alnum       [0-9A-Za-z]         IsPosixAlnum
-    alpha       [A-Za-z]            IsPosixAlpha
-    ascii       [\000-\177]         IsASCII
-    blank       [\011 ]             IsPosixBlank       [1]
-    cntrl       [\0-\37\177]        IsPosixCntrl
-    digit   \d  [0-9]               IsPosixDigit
-    graph       [!-~]               IsPosixGraph
-    lower       [a-z]               IsPosixLower
-    print       [ -~]               IsPosixPrint
-    punct       [!-/:-@[-`{-~]      IsPosixPunct
-    space       [\11-\15 ]          IsPosixSpace        [2]
-            \s  [\11\12\14\15 ]     IsPerlSpace         [2]
-    upper       [A-Z]               IsPosixUpper
-    word    \w  [0-9A-Z_a-z]        IsPerlWord         [3]
-    xdigit      [0-9A-Fa-f]         IsXDigit
-
-=over
+X<\g> X<\k> X<\K> X<backreference>
+
+  Sequence   Note    Description
+   [...]     [1]  Match a character according to the rules of the bracketed
+                    character class defined by the "...".  Example: [a-z]
+                    matches "a" or "b" or "c" ... or "z"
+   [[:...:]] [2]  Match a character according to the rules of the POSIX
+                    character class "..." within the outer bracketed character
+                    class.  Example: [[:upper:]] matches any uppercase
+                    character.
+   \w        [3]  Match a "word" character (alphanumeric plus "_")
+   \W        [3]  Match a non-"word" character
+   \s        [3]  Match a whitespace character
+   \S        [3]  Match a non-whitespace character
+   \d        [3]  Match a decimal digit character
+   \D        [3]  Match a non-digit character
+   \pP       [3]  Match P, named property.  Use \p{Prop} for longer names.
+   \PP       [3]  Match non-P
+   \X        [4]  Match Unicode "eXtended grapheme cluster"
+   \C             Match a single C-language char (octet) even if that is part
+                    of a larger UTF-8 character.  Thus it breaks up characters
+                    into their UTF-8 bytes, so you may end up with malformed
+                    pieces of UTF-8.  Unsupported in lookbehind.
+   \1        [5]  Backreference to a specific capture buffer or group.
+                    '1' may actually be any positive integer.
+   \g1       [5]  Backreference to a specific or previous group,
+   \g{-1}    [5]  The number may be negative indicating a relative previous
+                    buffer and may optionally be wrapped in curly brackets for
+                    safer parsing.
+   \g{name}  [5]  Named backreference
+   \k<name>  [5]  Named backreference
+   \K        [6]  Keep the stuff left of the \K, don't include it in $&
+   \N        [7]  Any character but \n (experimental).  Not affected by /s
+                    modifier
+   \v        [3]  Vertical whitespace
+   \V        [3]  Not vertical whitespace
+   \h        [3]  Horizontal whitespace
+   \H        [3]  Not horizontal whitespace
+   \R        [4]  Linebreak
+
+=over 4
 
 =item [1]
 
-A GNU extension equivalent to C<[ \t]>, "all horizontal whitespace".
+See L<perlrecharclass/Bracketed Character Classes> for details.
 
 =item [2]
 
-Note that C<\s> and C<[[:space:]]> are B<not> equivalent as C<[[:space:]]>
-includes also the (very rare) "vertical tabulator", "\cK" or chr(11) in
-ASCII.
+See L<perlrecharclass/POSIX Character Classes> for details.
 
 =item [3]
 
-A Perl extension, see above.
-
-=back
-
-For example use C<[:upper:]> to match all the uppercase characters.
-Note that the C<[]> are part of the C<[::]> construct, not part of the
-whole character class.  For example:
-
-    [01[:alpha:]%]
+See L<perlrecharclass/Backslash sequences> for details.
 
-matches zero, one, any alphabetic character, and the percent sign.
+=item [4]
 
-=over 4
+See L<perlrebackslash/Misc> for details.
 
-=item C<$>
+=item [5]
 
-Currency symbol
+See L</Capture buffers> below for details.
 
-=item C<+> C<< < >> C<=> C<< > >> C<|> C<~>
+=item [6]
 
-Mathematical symbols
+See L</Extended Patterns> below for details.
 
-=item C<^> C<`>
-
-Modifier symbols (accents)
+=item [7]
 
+Note that C<\N> has two meanings.  When of the form C<\N{NAME}>, it matches the
+character whose name is C<NAME>; and similarly when of the form
+C<\N{U+I<wide hex char>}>, it matches the character whose Unicode ordinal is
+I<wide hex char>.  Otherwise it matches any character but C<\n>.
 
 =back
 
-The other named classes are:
-
-=over 4
-
-=item cntrl
-X<cntrl>
-
-Any control character.  Usually characters that don't produce output as
-such but instead control the terminal somehow: for example newline and
-backspace are control characters.  All characters with ord() less than
-32 are usually classified as control characters (assuming ASCII,
-the ISO Latin character sets, and Unicode), as is the character with
-the ord() value of 127 (C<DEL>).
-
-=item graph
-X<graph>
-
-Any alphanumeric or punctuation (special) character.
-
-=item print
-X<print>
-
-Any alphanumeric or punctuation (special) character or the space character.
-
-=item punct
-X<punct>
-
-Any punctuation (special) character.
-
-=item xdigit
-X<xdigit>
-
-Any hexadecimal digit.  Though this may feel silly ([0-9A-Fa-f] would
-work just fine) it is included for completeness.
-
-=back
-
-You can negate the [::] character classes by prefixing the class name
-with a '^'. This is a Perl extension.  For example:
-X<character class, negation>
-
-    POSIX         traditional  Unicode
-
-    [[:^digit:]]    \D         \P{IsPosixDigit}
-    [[:^space:]]    \S         \P{IsPosixSpace}
-    [[:^word:]]     \W         \P{IsPerlWord}
-
-Perl respects the POSIX standard in that POSIX character classes are
-only supported within a character class.  The POSIX character classes
-[.cc.] and [=cc=] are recognized but B<not> supported and trying to
-use them will cause an error.
-
 =head3 Assertions
 
 Perl defines the following zero-width assertions:
@@ -448,12 +330,12 @@ X<regexp, zero-width assertion>
 X<regular expression, zero-width assertion>
 X<\b> X<\B> X<\A> X<\Z> X<\z> X<\G>
 
-    \b Match a word boundary
-    \B Match except at a word boundary
-    \A Match only at beginning of string
-    \Z Match only at end of string, or before newline at the end
-    \z Match only at end of string
-    \G Match only at pos() (e.g. at the end-of-match position
+    \b  Match a word boundary
+    \B  Match except at a word boundary
+    \A  Match only at beginning of string
+    \Z  Match only at end of string, or before newline at the end
+    \z  Match only at end of string
+    \G  Match only at pos() (e.g. at the end-of-match position
         of prior m//g)
 
 A word boundary (C<\b>) is a spot between two characters
@@ -517,7 +399,6 @@ left parentheses have opened before it.  Likewise \11 is a
 backreference only if at least 11 left parentheses have opened
 before it.  And so on.  \1 through \9 are always interpreted as
 backreferences.
-
 If the bracketing group did not match, the associated backreference won't
 match either. (This can happen if the bracketing group is optional, or
 in a different branch of an alternation.)
@@ -970,7 +851,7 @@ For reasons of security, this construct is forbidden if the regular
 expression involves run-time interpolation of variables, unless the
 perilous C<use re 'eval'> pragma has been used (see L<re>), or the
 variables contain results of C<qr//> operator (see
-L<perlop/"qr/STRING/imosx">).
+L<perlop/"qr/STRINGE<sol>msixpo">).
 
 This restriction is due to the wide-spread and remarkably convenient
 custom of using run-time determined strings as patterns.  For example:
@@ -1037,6 +918,12 @@ The following pattern matches a parenthesized group:
 See also C<(?PARNO)> for a different, more efficient way to accomplish
 the same task.
 
+For reasons of security, this construct is forbidden if the regular
+expression involves run-time interpolation of variables, unless the
+perilous C<use re 'eval'> pragma has been used (see L<re>), or the
+variables contain results of C<qr//> operator (see
+L<perlop/"qrE<sol>STRINGE<sol>msixpo">).
+
 Because perl's regex engine is not currently re-entrant, delayed
 code may not invoke the regex engine either directly with C<m//> or C<s///>),
 or indirectly with functions such as C<split>.
@@ -1346,7 +1233,7 @@ otherwise stated the ARG argument is optional; in some cases, it is
 forbidden.
 
 Any pattern containing a special backtracking verb that allows an argument
-has the special behaviour that when executed it sets the current packages'
+has the special behaviour that when executed it sets the current package's
 C<$REGERROR> and C<$REGMARK> variables. When doing so the following
 rules apply:
 
@@ -1467,8 +1354,7 @@ This zero-width pattern can be used to mark the point reached in a string
 when a certain part of the pattern has been successfully matched. This
 mark may be given a name. A later C<(*SKIP)> pattern will then skip
 forward to that point if backtracked into on failure. Any number of
-C<(*MARK)> patterns are allowed, and the NAME portion is optional and may
-be duplicated.
+C<(*MARK)> patterns are allowed, and the NAME portion may be duplicated.
 
 In addition to interacting with the C<(*SKIP)> pattern, C<(*MARK:NAME)>
 can be used to "label" a pattern branch, so that after matching, the
@@ -2152,6 +2038,17 @@ Subroutine call to a named capture buffer. Equivalent to C<< (?&NAME) >>.
 
 =head1 BUGS
 
+There are numerous problems with case insensitive matching of characters
+outside the ASCII range, especially with those whose folds are multiple
+characters, such as ligatures like C<LATIN SMALL LIGATURE FF>.
+
+In a bracketed character class with case insensitive matching, ranges only work
+for ASCII characters.  For example,
+C<m/[\N{CYRILLIC CAPITAL LETTER A}-\N{CYRILLIC CAPITAL LETTER YA}]/i>
+doesn't match all the Russian upper and lower case letters.
+
+Many regular expression constructs don't work on EBCDIC platforms.
+
 This document varies from difficult to understand to completely
 and utterly opaque.  The wandering prose riddled with jargon is
 hard to fathom in several places.