NAME/НАИМЕНОВАНИЕ
perlrebackslash - Бэкслеш и Эскейп последовательности в регулярных выражениях Perl
ОПИСАНИЕ
Документация верхнего уровня о регулярных выражениях Perl находится в perlre.
Этот документ описывает все backslash и escape последовательности. После объяснения роли обратной косой черты, перечисляются все последовательности, которые имеют специальное значение в регулярных выражениях Perl (в алфавитном порядке), затем описывается каждая из них.
Большинство последовательностей описаны в деталях в различных документах; основная цель этого документа заключается в кратком справочном руководстве, описывающем все backslash и escape последовательности.
Обратная косая черта (backslash)
В регулярном выражении обратной косой чертой можно выполнить одну из двух задач: Она либо отнимает особое значение символа после него (например, \|
найдет вертикальную черту, здесь это не знак или), или это начало последовательности, обратной косой черты или эскейп (backslash или escape sequence).
Правила, определяющие, что это, довольно просты: eсли символ после обратной косой черты является знаком ASCII пунктуации (не слово) (то есть, все, что не является буквой, цифрой или подчеркивания), то обратная косая черта просто снимает любое особое значение символа, после него.
Если символ после обратной косой черты ASCII буква или ASCII цифра, тогда последовательность может быть специальной; если это так, то она приводится ниже. Есть несколько букв, которые не используются, так что их эскейпинг косой чертой не меняет их специальности. Будущие версии Perl может назначить особый смысл для них, так что если у вас есть включенные предупреждения (use warnings), Perl выдает предупреждение, если вы используете такую последовательность. [1].
Однако, гарантируется, что последовательности обратной косой черты или эскейп никогда не будут иметь знака препинания после обратной косой черты, ни сейчас, ни в будущих версиях Perl 5. Так что это безопасно поставить косую черту перед несловесным символом.
Обратите внимание, что обратная косая черта является специальным символом; если вы хотите найти обратную косую черту, вы должны заэскейпить ее обратной косой чертой:/\\/
найдет одну косую черту (backslash).
- [1]
-
Есть одно исключение. Если вы используете алфавитно-цифровой символ как разделитель вашего шаблона (который вы, вероятно, не стоит делать по причине удобочитаемости), вы должны заэскейпить разделитель, если вы хотите найти его. Тогда Perl не будет предупреждать. Смотрите также "Подробности разбора (парсинга) конструкций в кавычках" in perlop.
Все последовательности и эскейпы
Тех, что не используются в пределах класса символов в квадратных скобосках (таких как [\da-z]
) помечаются как Не в [].
\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 Конец строки. Не в [].
Эскейп символы
Фиксированные знаки
У горстки знаков есть специальные эскейп символы. Следующая таблица показывает их, наряду с их кодами ASCII (в десятичном и шестнадцатиричном виде), их ASCII имя , контрол эскейп на ASCII платформах и короткое описание. (Для платформ расширенного двоично-десятичного кода (EBCDIC) см. "ОПЕРАТОР РАЗЛИЧИЯ" in 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 табуляция
- [1]
-
\b
это бекслешированный символ действует только внутри класса символов. Вне класс символов C <\b> это граница слово/не-слова. - [2]
-
\n
соответствует логической новой строке. Perl преобразует между\n
и ваш ОС родной символ новой строки при чтении или записи в текстовые файлы.
Пример
$str =~ /\t/; # Найдет, если $str содержит (горизонтальный) символ табуляции.
Управляющие символы (Control characters)
\c
используется для обозначения символа управления; символ следующий после \c
, определяет значение конструкции. Например значение \cA
chr(1)
и значение \cb
– chr(2)
и др. Подробные детали находятся в "Regexp операторы заключения в кавычки" in perlop. Полный cписок элементов chr(1)
, и т.д. средства для ASCII и EBCDIC платформ находится в "OPERATOR DIFFERENCES" in perlebcdic.
Обратите внимание что одна \c\
в конце регулярного выражения (или в двойных кавычках) не является допустимым. Обратная косая черта должна сопровождаться другой символ. То есть, \c\X
означает chr(28) . 'X'
для всех символов X.
Чтобы написать платформенно независимый код необходимо использовать \N{NAME}
вместо этого, например \N{ESCAPE}
или \N{U+001B}
, см. charnames.
Назначанный символ (Мнемоника): символ control.
Пример
$str =~ /\cK/; # Найдет, если $str содержит вертикальную табуляцию (control-K).
Именованные или нумерованные символы и последовательности символов
Символы Юникода имеют Юникодное имя и числовой код (порядковый). Используйте конструкцию \N{}
для указания символа по одному из этих значений. Некоторые последовательности символов также имеют имена.
Чтобы задать имя, имя символ символа или последовательности символов нужно писать между фигурными скобками.
Чтобы указать символ с помощью Юникодного кода (Unicode code point) используйте форму \N{U+код символа}
, где код символа — число в шестнадцатеричной форме, которое указывает на код символа Юникода, которому в Юникоде присвоен соответствующий символ. Обычно, но не обязательно использовать нули в начале числа размером в 4 цифры. Таким образом \N{U+0041}
означает LATIN CAPITAL LETTER A
, и вы редко сможете увидеть это написание без двух ведущих нулей. \N{U+0041}
означает "A" даже на машинах EBCDIC (где порядковое значение "A" не является 0x41).
Возможно даже дать ваши собственные имена для символов и символьных последовательностей. Для подробностей см. charnames.
(Есть расширение внутренней формы, которое вы можете увидеть в выводе отладки: \N{U+кодовая точка.кодовая точка...}
. ...
означает любое количество этих кодовых точек, разделенных точками. Это представляет собой последовательность, образованную символами. Это только внутренняя форма, она может меняться, и вы не должны пытаться использовать ее самостоятельно).
Mnemonic: Named character. (Именованные символы.)
Обратите внимание, что символ или последовательность символов в виде именованного или пронумерованного символа рассматривается как символ без специального смысла для движка регекс и будет искаться "как есть".
Например
$str =~ /\N{THAI CHARACTER SO SO}/; # Найдет тайский смивол SO SO
use charnames 'Cyrillic'; # Загружает кириллические имена.
$str =~ /\N{ZHE}\N{KA}/; # Найдет "ZHE" следующис за "KA".
Восьмеричные эскейп-последовательности
Существует две формы Восьмеричной эскейп-последовательности. Каждая используется для указания символа его кодовой точкой, указанной в восьмеричной системе счисления.
Одна из форм доступных начиная в Perl 5.14 выглядит как \o{...}
, где точки представляют собой один или несколько восьмеричных цифр. Она может использоваться для любого символа Юникода.
Он был введен, чтобы избежать потенциальных проблем с другой формой, имеющейся в всех версия языка Перл. Эта форма состоит из косой черты за которой следуют три восьмеричные цифры. Одна из проблем с этой формой является то, что она может выглядеть так же, как старый стиль обратной ссылки (см. "Разрешение неоднозначности правил между восьмеричным написанием в старинном стиле и обратной ссылкой" ("Disambiguation rules between old-style octal escapes and backreferences") ниже.) Этого можно избежать, сделав первый из трех цифр всегда ноль, но что делает \077 самой большой кодовой точкой в спецификации.
В некоторых контекстах косая черта и два или даже одна восьмеричная цифра могут быть интерпретируется как восьмеричный эскйп символ, иногда с предупреждением и из-за некоторых ошибоки(bugs), иногда с неожиданными результатами. Кроме того если вы создаете регекс из небольших фрагментов, объединяемых вместе, и вы используете меньше, чем три цифры, начала одного фрагмента может быть истолковано как добавление цифр в окончание фрагмента перед ним. Смотрите "Абсолютные ссылки" для более подробного обсуждения и примеров фрагментов с проблемами (snippet problem).
Обратите внимание, что символ в виде как восьмеричный эскйп символа рассматривается, как символ без особого значения в двигателе регекса и будет искаться "как есть" ("as is").
Подводя итог, \o{}
форма всегда является безопасным для использования, и другие формы безопасны для использования для кодовых точек от \077 при использовании ровно трёх цифр.
Mnemonic: 0ctal or octal.
Примеры (если платформа 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).
Разрешение неоднозначности правил между восьмеричным написанием в старинном стиле и обратной ссылкой
(Disambiguation rules between old-style octal escapes and backreferences)
Восьмеричная эсйкейп-последовательность \000
формируют вне символьных скобочных классов потенциально столкновение со старым стилем обратных ссылок (см. "Абсолютные ссылки" ниже). Они оба состоят из косой черты, за которой идет число. Поэтому Perl использует эвристический подход для определения, является ли это обратной ссылкой или восьмеричный эскйеп символа. Perl использует следующие правила для однозначного определения:
Если за обратной косой чертой следует одна цифра, это обратная ссылка.
Если первая цифра после обратной косой черты имеет значение 0, это восьмеричный эскйеп символ.
Если номер после обратной косой черты уже 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'.
Вы можете заставить интерпретировать обратную ссылку всегда с помощью \g{...}
. Вы можете заставить интерпретировать восьмеричным эскейп символ с помощью формы \o{...}
, или для чисел вышк \077 (= 63 десятичных), с помощью трех цифр начинающихся с "0".
Шестнадцатеричные эскейп-последовательности
Как в восьмеричных эскейп-последовательностях существует две формы шестнадцатеричных эскейп-последовательностей, но оба начинаются с одного и того же \x
. Далее идет либо ровно две шестнадцатеричных цифры, образуя число, или шестнадцатеричное число произвольной длины в окружении фигурных скобок. Шестнадцатеричное число имеет код точки символа, который вы хотите представить.
Обратите внимание, что символ выраженный как один из этих эскейп-символов считается символом без особого значения для движка регекс и будет искаться "как есть".
Mnemonic: hexadecimal.
Примеры (если платформа 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.
Модификаторы
A number of backslash sequences have to do with changing the character, or characters following them. \l
will lowercase the character following it, while \u
will uppercase (or, more accurately, titlecase) the character following it. They provide functionality similar to the functions lcfirst
and ucfirst
.
To uppercase or lowercase several characters, one might want to use \L
or \U
, which will lowercase/uppercase all characters following them, until either the end of the pattern or the next occurrence of \E
, whichever comes first. They provide functionality similar to what the functions lc
and uc
provide.
\Q
is used to quote (disable) pattern metacharacters, up to the next \E
or the end of the pattern. \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 "quotemeta" in perlfunc for details on what gets quoted for non-ASCII code points. Using this ensures that any character between \Q
and \E
will be matched literally, not interpreted as a metacharacter by the regex engine.
\F
can be used to casefold all characters following, up to the next \E
or the end of the pattern. It provides the functionality similar to the fc
function.
Mnemonic: Lowercase, Uppercase, Fold-case, Quotemeta, End.
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\)/
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 perlrecharclass.
\w
is a character class that matches any single word character (letters, digits, Unicode marks, and connector punctuation (like the underscore)). \d
is a character class that matches any decimal digit, while the character class \s
matches any whitespace character. New in perl 5.10.0 are the classes \h
and \v
which match horizontal and vertical whitespace characters.
The exact set of characters matched by \d
, \s
, and \w
varies depending on various pragma and regular expression modifiers. It is possible to restrict the match to the ASCII range by using the /a
regular expression modifier. See perlrecharclass.
The uppercase variants (\W
, \D
, \S
, \H
, and \V
) are character classes that match, respectively, any character that isn't a word character, digit, whitespace, horizontal whitespace, or vertical whitespace.
Mnemonics: word, digit, space, horizontal, vertical.
Unicode classes
\pP
(where P
is a single letter) and \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 \PP
and \P{Property}
make the sequence match a character that doesn't match the given Unicode property. For more details, see "Backslash sequences" in perlrecharclass and "Unicode Character Properties" in perlunicode.
Mnemonic: property.
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 backreference: absolutely, relatively, and by name.
Absolute referencing
Either \gN
(starting in Perl 5.10.0), or \N
(old-style) where N is a positive (unsigned) decimal number of any length is an absolute reference to a capturing group.
N refers to the Nth set of parentheses, so \gN
refers to whatever has been matched by that set of parentheses. Thus \g1
refers to the first capture group in the regex.
The \gN
form can be equivalently written as \g{N}
which avoids ambiguity when building a regex by concatenating shorter strings. Otherwise if you had a regex qr/$a$b/
, and $a
contained "\g1"
, and $b
contained "37"
, you would get /\g137/
which is probably not what you intended.
In the \N
form, N must not begin with a "0", and there must be at least N capturing groups, or else N is considered an octal escape (but something like \18
is the same as \0018
; that is, the octal escape "\001"
followed by a literal digit "8"
).
Mnemonic: group.
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").
Relative referencing
\g-N
(starting in Perl 5.10.0) is used for relative addressing. (It can be written as \g{-N
.) It refers to the Nth group before the \g{-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.
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'.
Named referencing
\g{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, \g{name}
may also be written as \k{name}
, \k<name>
or \k'name'
.
To prevent any ambiguity, name must not start with a digit nor contain a hyphen.
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")
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.
- \A
-
\A
only matches at the beginning of the string. If the/m
modifier isn't used, then/\A/
is equivalent to/^/
. However, if the/m
modifier is used, then/^/
matches internal newlines, but the meaning of/\A/
isn't changed by the/m
modifier.\A
matches at the beginning of the string regardless whether the/m
modifier is used. - \z, \Z
-
\z
and\Z
match at the end of the string. If the/m
modifier isn't used, then/\Z/
is equivalent to/$/
; that is, it matches at the end of the string, or one before the newline at the end of the string. If the/m
modifier is used, then/$/
matches at internal newlines, but the meaning of/\Z/
isn't changed by the/m
modifier.\Z
matches at the end of the string (or just before a trailing newline) regardless whether the/m
modifier is used.\z
is just like\Z
, except that it does not match before a trailing newline.\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. - \G
-
\G
is usually used only in combination with the/g
modifier. If the/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.\G
matches the point where the previous match on that string ended, or the beginning of that string if there was no previous match.Mnemonic: Global.
- \b, \B
-
\b
matches at any place between a word and a non-word character;\B
matches at any place between characters where\b
doesn't match.\b
and\B
assume there's a non-word character before the beginning and after the end of the source string; so\b
will match at the beginning (or end) of the source string if the source string begins (or ends) with a word character. Otherwise,\B
will match.Do not use something like
\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: boundary.
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'
}
Misc
Here we document the backslash sequences that don't fall in one of the categories above. These are:
- \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: oCtet.
- \K
-
This appeared in perl 5.10.0. Anything matched left of
\K
is not included in$&
, and will not be replaced if the pattern is used in a substitution. This lets you writes/PAT1 \K PAT2/REPL/x
instead ofs/(PAT1) PAT2/${1}REPL/x
ors/(?<=PAT1) PAT2/REPL/x
.Mnemonic: Keep.
- \N
-
This feature, available starting in v5.12, matches any character that is not a newline. It is a short-hand for writing
[^\n]
, and is identical to the.
metasymbol, except under the/s
flag, which changes the meaning of.
, but not\N
.Note that
\N{...}
can mean a named or numbered character .Mnemonic: Complement of \n.
- \R
-
\R
matches a generic newline; that is, anything considered a linebreak sequence by Unicode. This includes all characters matched by\v
(vertical whitespace), and the multi character sequence"\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).\R
is equivalent to(?>\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
\R
matches the entire string, and won't backtrack to match just the"\x0D"
.) Since\R
can match a sequence of more than one character, it cannot be put inside a bracketed character class;/[\R]/
is an error; use\v
instead.\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.
\R
was picked because PCRE already uses\R
, and more importantly because Unicode recommends such a regular expression metacharacter, and suggests\R
as its notation. - \X
-
This matches a Unicode extended grapheme cluster.
\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: eXtended Unicode character.
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.
ПЕРЕВОДЧИКИ
Николай Мишин
<mi@ya.ru>