
=encoding utf8

=head1 NAME/НАИМЕНОВАНИЕ

perlrebackslash - Бэкслеш и Эскейп последовательности в регулярных выражениях Perl

=head1 ОПИСАНИЕ

Документация верхнего уровня о регулярных выражениях Perl 
находится в L<perlre>.

Этот документ описывает все backslash и escape последовательности. После
объяснения роли обратной косой черты, перечисляются все последовательности, которые имеют
специальное значение в регулярных выражениях Perl (в алфавитном порядке),
затем описывается каждая из них.

Большинство последовательностей описаны в деталях в различных документах; основная
цель этого документа заключается в кратком справочном руководстве, описывающем все
backslash и escape последовательности.

=head2 Обратная косая черта (backslash)

В регулярном выражении обратной косой чертой можно выполнить одну из двух задач:
Она либо отнимает особое значение символа после него
(например, C<\|> найдет вертикальную черту, здесь это не знак или),
или это начало последовательности, обратной косой черты или эскейп (backslash или escape sequence).

Правила, определяющие, что это, довольно просты: eсли символ
после обратной косой черты является знаком ASCII пунктуации (не слово)  (то есть,
все, что не является буквой, цифрой или подчеркивания), то обратная косая черта
просто  снимает любое особое значение символа, после него.

Если символ после обратной косой черты ASCII буква или ASCII цифра,
тогда последовательность может быть специальной; если это так, то она приводится ниже. Есть несколько букв,
 которые не используются, так что их эскейпинг косой чертой не меняет их специальности. 
 Будущие версии Perl может назначить особый смысл для них, так что если
у вас есть включенные предупреждения (use warnings), Perl выдает предупреждение, если вы используете такую
последовательность. [1].

Однако, гарантируется, что последовательности обратной косой черты или эскейп никогда не будут иметь
знака препинания после обратной косой черты, ни сейчас, ни в будущих
версиях Perl 5. Так что это безопасно поставить косую черту перед несловесным символом.

Обратите внимание, что обратная косая черта является специальным символом; если вы хотите найти обратную косую черту,
вы должны заэскейпить ее обратной косой чертой:C</\\/> найдет одну косую черту (backslash).

=over 4

=item [1]

Есть одно исключение. Если вы используете алфавитно-цифровой символ как
разделитель вашего шаблона (который вы, вероятно, не стоит делать по причине удобочитаемости),
вы должны заэскейпить разделитель, если вы хотите найти его. 
Тогда Perl не будет предупреждать. Смотрите также L<perlop/Подробности разбора (парсинга) конструкций в кавычках>.

=back


=head2 Все последовательности и эскейпы

Тех, что не используются в пределах класса символов в квадратных скобосках (таких как C<[\da-z]>) помечаются
как C<Не в [].>

 \000              Восьмеричная escape-последовательность.  Смотри также \o{}.
 \1                Абсолютная обратная ссылка.  Не в [].
 \a                Будильник или Звонок.
 \A                Начало строки.  Не в [].
 \b                Граница слова/не-слова. (Обратный слеш в []).
 \B                Не граница слова/не-слова. Не в [].
 \cX               Control-X.
 \C                Один октет, даже под UTF-8.  Не в [].
 \d                Класс символов для цифр.
 \D                Класс символов для не-цифр.
 \e                Символ эскейпа.
 \E                Выключает обоработку \Q, \L и \U. Не в [].
 \f                Перевод формата (Formfeed).
 \F                Возвращает регистронезависимое представление (Foldcase) до \E.  Не в [].
 \g{}, \g1         Именованная, абсолютная или относительная обратная ссылка. Не в [].
 \G                Найдет, где остановился предыдущий m//g Позиция поиска в регекспе (Pos).  Не в [].
 \h                Класс символов для горизонтальных пробелов.
 \H                Класс символов для не-горизонтальных пробелов.
 \k{}, \k<>, \k''  Именованная обратная ссылка. Не в [].
 \K                Сохраняет найденный материал слева от \K, не включая его в $&. Не в [].
 \l                Следующий символ в нижнем регистре.  Не в [].
 \L                Нижний регистр до \E.  Не в [].
 \n                (Логически) символ новой строки.
 \N                Любой символ, кроме символа новой строки.  Не в [].
 \N{}              Именованный или номерной символ (Юникода) или последовательности.
 \o{}              Восьмеричная эскейп-последовательность.
 \p{}, \pP         Символ с данным Юникодным свойством.
 \P{}, \PP         Символ без данного Юникодного свойства.
 \Q                Квотирует (отключает) действие метасиволов в шаблоне до \E.  Не в [].
 \r                Символ возврата каретки.
 \R                Универсальная новая строка           (?>\v|\x0D\x0A)  Не в [].
 \s                Класс символов для пробелов.
 \S                Класс символов для не-пробелов.
 \t                Символ табуляции.
 \u                Следующий символ в верхнем регистре.  Не в [].
 \U                Верхний регистр до \E.  Не в [].
 \v                Класс символов для вертикальных пробелов.
 \V                Класс символов для не-вертикальных пробелов.
 \w                Класс символов для слова.
 \W                Класс символов для не-слова.
 \x{}, \x00        Шестнадцатеричная эскейп-последовательность.
 \X                Найдет Юникодный расширенный графема кластер ("extended grapheme cluster").  Не в [].
 \z                Конец строки.  Не в [].
 \Z                Конец строки.  Не в [].

=head2 Эскейп символы

=head3  Фиксированные знаки

У горстки знаков есть специальные I<эскейп символы>. Следующая
таблица показывает их, наряду с их кодами ASCII (в десятичном и шестнадцатиричном виде),
их ASCII имя , контрол эскейп на ASCII платформах  и короткое
описание. (Для платформ расширенного двоично-десятичного кода (EBCDIC) см. L<perlebcdic/ОПЕРАТОР РАЗЛИЧИЯ>.)

 Seq.  Code Point  ASCII   Cntrl   Description.
       Dec    Hex
  \a     7     07    BEL    \cG    будильник или звонок.
  \b     8     08     BS    \cH    обратный слеш [1]
  \e    27     1B    ESC    \c[    символ эскейпа
  \f    12     0C     FF    \cL    перевод формата
  \n    10     0A     LF    \cJ    перевод строки [2]
  \r    13     0D     CR    \cM    возврат каретки
  \t     9     09    TAB    \cI    табуляция

=over 4

=item [1]

C<\b> это бекслешированный символ действует только внутри класса символов. Вне
класс символов C <\b> это граница слово/не-слова.

=item [2]

C<\n> соответствует логической новой строке. Perl преобразует между C<\n> и ваш
ОС родной символ новой строки при чтении или записи в текстовые файлы.

=back

=head4 Пример

 $str =~ /\t/;   # Найдет, если $str содержит (горизонтальный) символ табуляции.

=head3 Управляющие символы (Control characters)

C<\c> используется для обозначения символа управления; символ следующий после C<\c>,
определяет значение конструкции. Например значение C<\cA>
C<chr(1)> и значение C<\cb> – C<chr(2)> и др.
Подробные детали находятся в L<perlop/"Regexp операторы заключения в кавычки">. Полный
cписок элементов C<chr(1)>, и т.д. средства для ASCII и EBCDIC платформ находится в
L<perlebcdic/OPERATOR DIFFERENCES>.

Обратите внимание что одна C<\c\> в конце регулярного выражения (или в двойных кавычках)
 не является допустимым. Обратная косая черта должна сопровождаться другой символ.
То есть, C<\c\I<X>> означает C<chr(28) . 'I<X>'> для всех символов I<X>.

Чтобы написать платформенно независимый код необходимо использовать  C<\N{I<NAME>}> вместо этого, например
C<\N{ESCAPE}> или C<\N{U+001B}>, см. L<charnames>.

Назначанный символ (Мнемоника): символ I<c>ontrol.

=head4 Пример

 $str =~ /\cK/;  # Найдет, если $str содержит вертикальную табуляцию (control-K).

=head3 Именованные или нумерованные символы и последовательности символов

Символы Юникода имеют Юникодное имя и числовой код (порядковый). 
Используйте конструкцию C<\N{}> для указания символа по одному из этих значений.
Некоторые последовательности символов также имеют имена.

Чтобы задать имя, имя символ символа или последовательности символов нужно писать
между фигурными скобками.

Чтобы указать символ с помощью Юникодного кода (Unicode code point) используйте форму  C<\N{U+I<код символа>}>, где I<код символа> — число в шестнадцатеричной форме, которое указывает на код символа Юникода,
 которому в Юникоде присвоен соответствующий символ. 
 Обычно, но не обязательно использовать нули в начале числа размером в 4 цифры. 
 Таким образом C<\N{U+0041}> означает C<LATIN CAPITAL LETTER A>, и вы 
редко сможете увидеть это написание без двух ведущих нулей. C<\N{U+0041}> означает
"A" даже на машинах EBCDIC (где порядковое значение  "A" не является 0x41).

Возможно даже дать ваши собственные имена для символов и символьных
последовательностей. Для подробностей см. L<charnames>.

(Есть расширение внутренней формы, которое вы можете увидеть в выводе отладки:
C<\N{U+I<кодовая точка>.I<кодовая точка>...}>.
C<... > означает любое количество этих I<кодовых точек>, разделенных точками.
Это представляет собой последовательность, образованную символами. Это только внутренняя
 форма, она может меняться, и вы не должны пытаться использовать ее самостоятельно).

Mnemonic: I<N>amed character. (Именованные символы.)

Обратите внимание, что символ или последовательность символов в виде именованного
или пронумерованного символа рассматривается как символ без специального
 смысла для движка регекс и будет искаться "как есть".

=head4 Например

 $str =~ /\N{THAI CHARACTER SO SO}/;  # Найдет тайский смивол SO SO

 use charnames 'Cyrillic';            # Загружает кириллические имена.
 $str =~ /\N{ZHE}\N{KA}/;             # Найдет "ZHE" следующис за "KA".

=head3 Восьмеричные эскейп-последовательности

Существует две формы Восьмеричной эскейп-последовательности. Каждая используется для указания символа
его кодовой точкой, указанной в восьмеричной системе счисления.

Одна из форм доступных начиная в Perl 5.14 выглядит как C<\o{...}>, где точки
представляют собой один или несколько восьмеричных цифр. Она может использоваться для любого символа Юникода.

Он был введен, чтобы избежать потенциальных проблем с другой формой,
имеющейся в всех версия языка Перл. Эта форма состоит из косой черты за которой следуют три
восьмеричные цифры. Одна из проблем с этой формой является то, что она может выглядеть так же, как
старый стиль обратной ссылки (см.
L</Разрешение неоднозначности правил между восьмеричным написанием в старинном стиле и обратной ссылкой>
(L</Disambiguation rules between old-style octal escapes and backreferences>)
ниже.) Этого можно избежать, сделав первый из трех цифр всегда
ноль, но что делает \077 самой большой кодовой точкой в спецификации.

В некоторых контекстах косая черта и два или даже одна восьмеричная цифра могут быть
интерпретируется как восьмеричный эскйп символ, иногда с предупреждением и из-за некоторых
ошибоки(bugs), иногда с неожиданными результатами. Кроме того если вы создаете регекс
из небольших фрагментов, объединяемых вместе, и вы используете меньше, чем три
цифры, начала одного фрагмента может быть истолковано как добавление цифр
в окончание фрагмента перед ним. Смотрите L</Абсолютные ссылки> для более
подробного обсуждения и примеров фрагментов с проблемами (snippet problem).

Обратите внимание, что символ в виде как восьмеричный эскйп символа рассматривается, как
 символ без особого значения в двигателе регекса и будет искаться "как есть" ("as is").

Подводя итог, C<\o{}> форма всегда является безопасным для использования, и другие формы
безопасны для использования для кодовых точек от \077 при использовании ровно трёх цифр.

Mnemonic: I<0>ctal or I<o>ctal.

=head4 Примеры (если платформа ASCII)

 $str = "Perl";
 $str =~ /\o{120}/;  # Найдет, "\120" это "P".
 $str =~ /\120/;     # Тоже.
 $str =~ /\o{120}+/; # Найдет, "\120" это "P",
                     # Это повторяется по крайней мере один раз.
 $str =~ /\120+/;    # Тоже.
 $str =~ /P\053/;    # Не найдет, "\053" это "+" взятый буквально.
 /\o{23073}/         # Черный на переднем плане, белый фон, улыбающееся лицо.(Black foreground, white background smiling face.)
 /\o{4801234567}/    # Выдает предупреждение и дает chr(4).

=head4 Разрешение неоднозначности правил между восьмеричным написанием в старинном стиле и обратной ссылкой

(Disambiguation rules between old-style octal escapes and backreferences)

Восьмеричная эсйкейп-последовательность C<\000> формируют вне символьных скобочных классов
потенциально столкновение со старым стилем обратных ссылок (см. L</Абсолютные ссылки>
ниже). Они оба состоят из косой черты, за которой идет число. Поэтому Perl
использует эвристический подход для определения, является ли это обратной ссылкой или восьмеричный эскйеп символа.
Perl использует следующие правила для однозначного определения:

=over 4

=item 1

Если за обратной косой чертой следует одна цифра, это обратная ссылка.

=item 2

Если первая цифра после обратной косой черты имеет значение 0, это восьмеричный эскйеп символ.

=item 3

Если номер после обратной косой черты уже N (в десятичной системе) и Perl
видел N групп захвата, Perl считает, что это обратная ссылка. В противном случае,
он считает это Восьмеричным эскейп символом. Если N имеет более чем три цифры, Perl
принимает только первые три для Восьмеричного эскейп символа; остальные совпадают, как есть.

 my $pat  = "(" x 999;
    $pat .= "a";
    $pat .= ")" x 999;
 /^($pat)\1000$/;   #  Найдет 'aa'; есть 1000 групп захвата.
 /^$pat\1000$/;     #  Найдет 'a@0'; есть 999 групп захвата
                    #  и \1000 выглядит, как \100 (a '@') и a '0'.

=back

Вы можете заставить интерпретировать обратную ссылку всегда с помощью  C<\g{...}>.
Вы можете заставить интерпретировать восьмеричным эскейп символ с помощью формы C<\o{...}>
, или для чисел вышк \077 (= 63 десятичных), с помощью трех цифр начинающихся с "0".

=head3 Шестнадцатеричные эскейп-последовательности

Как в восьмеричных эскейп-последовательностях существует две формы шестнадцатеричных эскейп-последовательностей, но оба начинаются с одного и того же C<\x>. Далее идет либо ровно две шестнадцатеричных
цифры, образуя число, или шестнадцатеричное число произвольной длины в окружении
фигурных скобок. Шестнадцатеричное число имеет код точки символа, который вы хотите представить.


Обратите внимание, что символ выраженный как один из этих эскейп-символов считается
символом без особого значения для движка регекс и будет искаться
"как есть".

Mnemonic: heI<x>adecimal.

=head4 Примеры (если платформа ASCII)

 $str = "Perl";
 $str =~ /\x50/;    # Match, "\x50" is "P".
 $str =~ /\x50+/;   # Match, "\x50" is "P", it is repeated at least once
 $str =~ /P\x2B/;   # No match, "\x2B" is "+" and taken literally.

 /\x{2603}\x{2602}/ # Snowman with an umbrella.
                    # The Unicode character 2603 is a snowman,
                    # the Unicode character 2602 is an umbrella.
 /\x{263B}/         # Black smiling face.
 /\x{263b}/         # Same, the hex digits A - F are case insensitive.

=head2 Модификаторы

A number of backslash sequences have to do with changing the character,
or characters following them. C<\l> will lowercase the character following
it, while C<\u> will uppercase (or, more accurately, titlecase) the
character following it. They provide functionality similar to the
functions C<lcfirst> and C<ucfirst>.

To uppercase or lowercase several characters, one might want to use
C<\L> or C<\U>, which will lowercase/uppercase all characters following
them, until either the end of the pattern or the next occurrence of
C<\E>, whichever comes first. They provide functionality similar to what
the functions C<lc> and C<uc> provide.

C<\Q> is used to quote (disable) pattern metacharacters, up to the next
C<\E> or the end of the pattern. C<\Q> adds a backslash to any character
that could have special meaning to Perl.  In the ASCII range, it quotes
every character that isn't a letter, digit, or underscore.  See
L<perlfunc/quotemeta> for details on what gets quoted for non-ASCII
code points.  Using this ensures that any character between C<\Q> and
C<\E> will be matched literally, not interpreted as a metacharacter by
the regex engine.

C<\F> can be used to casefold all characters following, up to the next C<\E>
or the end of the pattern. It provides the functionality similar to
the C<fc> function.

Mnemonic: I<L>owercase, I<U>ppercase, I<F>old-case, I<Q>uotemeta, I<E>nd.

=head4 Examples

 $sid     = "sid";
 $greg    = "GrEg";
 $miranda = "(Miranda)";
 $str     =~ /\u$sid/;        # Matches 'Sid'
 $str     =~ /\L$greg/;       # Matches 'greg'
 $str     =~ /\Q$miranda\E/;  # Matches '(Miranda)', as if the pattern
                              #   had been written as /\(Miranda\)/

=head2 Character classes

Perl regular expressions have a large range of character classes. Some of
the character classes are written as a backslash sequence. We will briefly
discuss those here; full details of character classes can be found in
L<perlrecharclass>.

C<\w> is a character class that matches any single I<word> character
(letters, digits, Unicode marks, and connector punctuation (like the
underscore)).  C<\d> is a character class that matches any decimal
digit, while the character class C<\s> matches any whitespace character.
New in perl 5.10.0 are the classes C<\h> and C<\v> which match horizontal
and vertical whitespace characters.

The exact set of characters matched by C<\d>, C<\s>, and C<\w> varies
depending on various pragma and regular expression modifiers.  It is
possible to restrict the match to the ASCII range by using the C</a>
regular expression modifier.  See L<perlrecharclass>.

The uppercase variants (C<\W>, C<\D>, C<\S>, C<\H>, and C<\V>) are
character classes that match, respectively, any character that isn't a
word character, digit, whitespace, horizontal whitespace, or vertical
whitespace.

Mnemonics: I<w>ord, I<d>igit, I<s>pace, I<h>orizontal, I<v>ertical.

=head3 Unicode classes

C<\pP> (where C<P> is a single letter) and C<\p{Property}> are used to
match a character that matches the given Unicode property; properties
include things like "letter", or "thai character". Capitalizing the
sequence to C<\PP> and C<\P{Property}> make the sequence match a character
that doesn't match the given Unicode property. For more details, see
L<perlrecharclass/Backslash sequences> and
L<perlunicode/Unicode Character Properties>.

Mnemonic: I<p>roperty.

=head2 Referencing

If capturing parenthesis are used in a regular expression, we can refer
to the part of the source string that was matched, and match exactly the
same thing. There are three ways of referring to such I<backreference>:
absolutely, relatively, and by name.

=for later add link to perlrecapture

=head3 Absolute referencing

Either C<\gI<N>> (starting in Perl 5.10.0), or C<\I<N>> (old-style) where I<N>
is a positive (unsigned) decimal number of any length is an absolute reference
to a capturing group.

I<N> refers to the Nth set of parentheses, so C<\gI<N>> refers to whatever has
been matched by that set of parentheses.  Thus C<\g1> refers to the first
capture group in the regex.

The C<\gI<N>> form can be equivalently written as C<\g{I<N>}>
which avoids ambiguity when building a regex by concatenating shorter
strings.  Otherwise if you had a regex C<qr/$a$b/>, and C<$a> contained
C<"\g1">, and C<$b> contained C<"37">, you would get C</\g137/> which is
probably not what you intended.

In the C<\I<N>> form, I<N> must not begin with a "0", and there must be at
least I<N> capturing groups, or else I<N> is considered an octal escape
(but something like C<\18> is the same as C<\0018>; that is, the octal escape
C<"\001"> followed by a literal digit C<"8">).

Mnemonic: I<g>roup.

=head4 Examples

 /(\w+) \g1/;    # Finds a duplicated word, (e.g. "cat cat").
 /(\w+) \1/;     # Same thing; written old-style.
 /(.)(.)\g2\g1/;  # Match a four letter palindrome (e.g. "ABBA").


=head3 Relative referencing

C<\g-I<N>> (starting in Perl 5.10.0) is used for relative addressing.  (It can
be written as C<\g{-I<N>>.)  It refers to the I<N>th group before the
C<\g{-I<N>}>.

The big advantage of this form is that it makes it much easier to write
patterns with references that can be interpolated in larger patterns,
even if the larger pattern also contains capture groups.

=head4 Examples

 /(A)        # Group 1
  (          # Group 2
    (B)      # Group 3
    \g{-1}   # Refers to group 3 (B)
    \g{-3}   # Refers to group 1 (A)
  )
 /x;         # Matches "ABBA".

 my $qr = qr /(.)(.)\g{-2}\g{-1}/;  # Matches 'abab', 'cdcd', etc.
 /$qr$qr/                           # Matches 'ababcdcd'.

=head3 Named referencing

C<\g{I<name>}> (starting in Perl 5.10.0) can be used to back refer to a
named capture group, dispensing completely with having to think about capture
buffer positions.

To be compatible with .Net regular expressions, C<\g{name}> may also be
written as C<\k{name}>, C<< \k<name> >> or C<\k'name'>.

To prevent any ambiguity, I<name> must not start with a digit nor contain a
hyphen.

=head4 Examples

 /(?<word>\w+) \g{word}/ # Finds duplicated word, (e.g. "cat cat")
 /(?<word>\w+) \k{word}/ # Same.
 /(?<word>\w+) \k<word>/ # Same.
 /(?<letter1>.)(?<letter2>.)\g{letter2}\g{letter1}/
                         # Match a four letter palindrome (e.g. "ABBA")

=head2 Assertions

Assertions are conditions that have to be true; they don't actually
match parts of the substring. There are six assertions that are written as
backslash sequences.

=over 4

=item \A

C<\A> only matches at the beginning of the string. If the C</m> modifier
isn't used, then C</\A/> is equivalent to C</^/>. However, if the C</m>
modifier is used, then C</^/> matches internal newlines, but the meaning
of C</\A/> isn't changed by the C</m> modifier. C<\A> matches at the beginning
of the string regardless whether the C</m> modifier is used.

=item \z, \Z

C<\z> and C<\Z> match at the end of the string. If the C</m> modifier isn't
used, then C</\Z/> is equivalent to C</$/>; that is, it matches at the
end of the string, or one before the newline at the end of the string. If the
C</m> modifier is used, then C</$/> matches at internal newlines, but the
meaning of C</\Z/> isn't changed by the C</m> modifier. C<\Z> matches at
the end of the string (or just before a trailing newline) regardless whether
the C</m> modifier is used.

C<\z> is just like C<\Z>, except that it does not match before a trailing
newline. C<\z> matches at the end of the string only, regardless of the
modifiers used, and not just before a newline.  It is how to anchor the
match to the true end of the string under all conditions.

=item \G

C<\G> is usually used only in combination with the C</g> modifier. If the
C</g> modifier is used and the match is done in scalar context, Perl 
remembers where in the source string the last match ended, and the next time,
it will start the match from where it ended the previous time.

C<\G> matches the point where the previous match on that string ended, 
or the beginning of that string if there was no previous match.

=for later add link to perlremodifiers

Mnemonic: I<G>lobal.

=item \b, \B

C<\b> matches at any place between a word and a non-word character; C<\B>
matches at any place between characters where C<\b> doesn't match. C<\b>
and C<\B> assume there's a non-word character before the beginning and after
the end of the source string; so C<\b> will match at the beginning (or end)
of the source string if the source string begins (or ends) with a word
character. Otherwise, C<\B> will match.   

Do not use something like C<\b=head\d\b> and expect it to match the
beginning of a line.  It can't, because for there to be a boundary before
the non-word "=", there must be a word character immediately previous.  
All boundary determinations look for word characters alone, not for
non-words characters nor for string ends.  It may help to understand how
<\b> and <\B> work by equating them as follows:

    \b	really means	(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
    \B	really means	(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))

Mnemonic: I<b>oundary.

=back

=head4 Examples

  "cat"   =~ /\Acat/;     # Match.
  "cat"   =~ /cat\Z/;     # Match.
  "cat\n" =~ /cat\Z/;     # Match.
  "cat\n" =~ /cat\z/;     # No match.

  "cat"   =~ /\bcat\b/;   # Matches.
  "cats"  =~ /\bcat\b/;   # No match.
  "cat"   =~ /\bcat\B/;   # No match.
  "cats"  =~ /\bcat\B/;   # Match.

  while ("cat dog" =~ /(\w+)/g) {
      print $1;           # Prints 'catdog'
  }
  while ("cat dog" =~ /\G(\w+)/g) {
      print $1;           # Prints 'cat'
  }

=head2 Misc

Here we document the backslash sequences that don't fall in one of the
categories above. These are:

=over 4

=item \C

C<\C> always matches a single octet, even if the source string is encoded
in UTF-8 format, and the character to be matched is a multi-octet character.
This is very dangerous, because it violates
the logical character abstraction and can cause UTF-8 sequences to become malformed.

Mnemonic: oI<C>tet.

=item \K

This appeared in perl 5.10.0. Anything matched left of C<\K> is
not included in C<$&>, and will not be replaced if the pattern is
used in a substitution. This lets you write C<s/PAT1 \K PAT2/REPL/x>
instead of C<s/(PAT1) PAT2/${1}REPL/x> or C<s/(?<=PAT1) PAT2/REPL/x>.

Mnemonic: I<K>eep.

=item \N

This feature, available starting in v5.12,  matches any character
that is B<not> a newline.  It is a short-hand for writing C<[^\n]>, and is
identical to the C<.> metasymbol, except under the C</s> flag, which changes
the meaning of C<.>, but not C<\N>.

Note that C<\N{...}> can mean a
L<named or numbered character
|/Named or numbered characters and character sequences>.

Mnemonic: Complement of I<\n>.

=item \R
X<\R>

C<\R> matches a I<generic newline>; that is, anything considered a
linebreak sequence by Unicode. This includes all characters matched by
C<\v> (vertical whitespace), and the multi character sequence C<"\x0D\x0A">
(carriage return followed by a line feed, sometimes called the network
newline; it's the end of line sequence used in Microsoft text files opened
in binary mode). C<\R> is equivalent to C<< (?>\x0D\x0A|\v) >>.  (The
reason it doesn't backtrack is that the sequence is considered
inseparable.  That means that

 "\x0D\x0A" =~ /^\R\x0A$/   # No match

fails, because the C<\R> matches the entire string, and won't backtrack
to match just the C<"\x0D">.)  Since
C<\R> can match a sequence of more than one character, it cannot be put
inside a bracketed character class; C</[\R]/> is an error; use C<\v>
instead.  C<\R> was introduced in perl 5.10.0.

Note that this does not respect any locale that might be in effect; it
matches according to the platform's native character set.

Mnemonic: none really. C<\R> was picked because PCRE already uses C<\R>,
and more importantly because Unicode recommends such a regular expression
metacharacter, and suggests C<\R> as its notation.

=item \X
X<\X>

This matches a Unicode I<extended grapheme cluster>.

C<\X> matches quite well what normal (non-Unicode-programmer) usage
would consider a single character.  As an example, consider a G with some sort
of diacritic mark, such as an arrow.  There is no such single character in
Unicode, but one can be composed by using a G followed by a Unicode "COMBINING
UPWARDS ARROW BELOW", and would be displayed by Unicode-aware software as if it
were a single character.

Mnemonic: eI<X>tended Unicode character.

=back

=head4 Examples

 "\x{256}" =~ /^\C\C$/;    # Match as chr (0x256) takes 
                           # 2 octets in UTF-8.

 $str =~ s/foo\Kbar/baz/g; # Change any 'bar' following a 'foo' to 'baz'
 $str =~ s/(.)\K\g1//g;    # Delete duplicated characters.

 "\n"   =~ /^\R$/;         # Match, \n   is a generic newline.
 "\r"   =~ /^\R$/;         # Match, \r   is a generic newline.
 "\r\n" =~ /^\R$/;         # Match, \r\n is a generic newline.

 "P\x{307}" =~ /^\X$/     # \X matches a P with a dot above.

=cut

=head1 ПЕРЕВОДЧИКИ
 
=over
 
=item * Николай Мишин C<< <mi@ya.ru> >>
 
=back

