The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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

perlreref - Справочник регулярных выражений Perl

ОПИСАНИЕ

Это краткий справочник по регулярным выражениям Perl. Для получения полной информации см perlre и perlop, а также как раздел "СМОТРИТЕ ТАКЖЕ" в этом документе.

ОПЕРАТОРЫ

=~ определяет к какой переменной применяется регкс. Если переменная отсутствует, то используется $_ .

    $var =~ /foo/;

!~ определяет к какой переменной применяется регкс. и изменяет результат поиска на противоположный; он возвращает ложь, если поиск удался, и правду, если не удалось ничего найти.

    $var !~ /foo/;

m/шаблон/msixpogcdual ищет строку по шаблону поиска, применяя соответствующие флаги (опции).

    m  Многострочный режим - ^ и $ находят внутренние строки
    s  поиск как в Одной строке (Single line) - . найдет \n
    i  Игнорировать регистр
    x  Улучшение читабельности (eXtended legibility) - свободно ставим пробелы и комментарии
    p  Сохраняет копии совпавшей строки -
       ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} будут определены.
    o  скомпилирует шаблон Один раз
    g  Глобально - все вхождения
    c  не сбрасывать pos при неудачном поиске, при использовании/g
    a  ограничивает \d, \s, \w и [:posix:] для поиска только ASCII символов
    aa (двойное a) также принуждает при флаге /i искать исключая перемешивание ASCII/non-ASCII
    l  искать согласно текущей локали
    u  искать согласно правилам Юникода
    d  искать согласно обычным правилам, если что-то не указывает на Юникод

Если 'шаблон' это пустая строка, то используется последний удачно найденный регекс. Разделители отличные от '/' могут использоваться и для этого оператора и для следующих. Ведущую m можно опустить, если разделитель '/'.

qr/шаблон/msixpodual позволяет сохранить регекс в переменной и передавать его во вне. Модификаторы для m// сохраняются в пределах регекса.

Наконец, разделители по умолчанию // для поиска могут быть изменены на произвольные разделители, но тогда в начале должны быть буква 'm': Замечание: если разделителем выступает сама буква 'm' то, перед ней, следует ставить пробел(спасибо zoffixznet за указание на эту ошибку):

    perl -E 'say "foo" =~ m mfoom ? "y" : "n"'

s/шаблон/заменитель/msixpogcedual заменяет найденное в 'шаблоне' на 'заменитель'. Модификаторы для m// с двумя дополнениями:

    e  Выполняет 'заменитель' как выражение
    r  Возвращает замену и оставляет исходную строку неизменной.

'e' может быть указан несколько раз. 'заменитель' интерпретируется как строка в двойных кавычках, пока она не заключена в одинарные (').

Выражение ?шаблон? такое же как m/шаблон/ но будет найдено только один раз. Нельзя использовать разделители или '|'. Можно сбросить с помощью reset().

СИНТАКСИС

 \       Превращает следующий за обратной косой чертой символ в обычный
 .       Найдет любой одиночный символ, кроме перевода строки (если не используется /s)
 ^       Находит начало строки (или линии, если используется /m )
 $       Находит конец строки (или линии, если используется /m )
 *       Предыдущий элемент повторяется 0 или более раз
 +       Предыдущий элемент повторяется один или более раз
 ?       Предыдущий элемент повторяется 0 или 1 раз
 {...}   Определяет диапазон повторений элемента, после которого он стоит
 [...]   Соответствует любому из символов, содержащихся в скобках
 (...)   Группирует подвыражения в $1, $2...
 (?:...) Группирует подвыражения без захвата
 |       Ищет выражение или до или после этого знака (или, or)
 \g1 или \g{1}, \g2 ...   Соответствует тексту из Энной группы
 \1, \2, \3 ...           Соответствует тексту из Энной группы
 \g-1 или \g{-1}, \g-2 ... Соответствует тексту из Энной предыдущей группы
 \g{name}     Именованная обратная ссылка
 \k<name>     Именованная обратная ссылка
 \k'name'     Именованная обратная ссылка
 (?P=name)    Именованная обратная ссылка (синтакс python)

УПРАВЛЯЮЩИЕ ПОСЛЕДОВАТЕЛЬНОСТИ

Эти работают в нормальных строках.

   \a       Тревога (звуковой сигнал)
   \e       Клавиша ESC (Escape)
   \f       Перевод формата (Formfeed)
   \n       Новая строка
   \r       Возврат каретки
   \t       Табуляция
   \037     Символы, представляющие 3 восьмеричные цифры, максимально \777
   \o{2307} Символы, представляющие восьмеричные цифры, без ограничений
   \x7f     Символы, представляющие 2 шестнадцатеричные цифры, максимально \xFF
   \x{263a} Символы, представляющий шестнадцатеричные цифры, без ограничений
   \cx      Control-x
   \N{name} Именованный символ Юникода или последовательность символов
   \N{U+263D} Символ Юникода в шестнадцатеричном формате

   \l  Следующий символ в нижнем регистре
   \u  Следующий символ в верхнем регистре
   \L  Нижний регистр до \E
   \U  Верхний регистр до \E
   \F  Возвращает регистронезависимое представление до \E
   \Q  Отключает действие метасиволов в шаблоне до \E
   \E  Завершение модификации

Для заглавного регистра , см "ЗаглавныйРегистр".

Эта одна последовательность работает по-другому по сравнению с обычными строками:

   \b  Утверждение, не backspace, за исключением символов класса

КЛАССЫ СИМВОЛОВ

   [amy]    Найдет 'a', 'm' или 'y'
   [f-j]    Тире указывает "диапазон"
   [f-j-]   Тире с эскейпом (обратным слешем) или вначале или конце обозначает простое 'тире'
   [^f-j]   Знак крышки указывает,  "найти любой сивмол _кроме_ этих"

Следующие последовательности (за исключением \N) работают внутри или без класса символов. Первые шесть локали, все работают с Unicode. См. perllocale и perlunicode для подробной информации.

   \d      Цифра
   \D      Не цифра
   \w      Словесный символ
   \W      Несловесный символ
   \s      Пробельный символ
   \S      Непробельный символ
   \h      Горизонтальный пробел
   \H      Негоризонтальный пробел
   \N      Не новая строка (когда не следует за '{NAME}';
           не действует в классе символов; эквивалентен [^\n]; это
           как '.' без модификатора /s )
   \v      Вертикальный пробел
   \V      Невертикальный пробел
   \R      Универсальная новая строка           (?>\v|\x0D\x0A)

   \C      Найдет байт (с Юникодом, '.' найдет символ)
   \pP     Найдет свойство (Юникодное) с P-именем
   \p{...} Найдет Юникодное свойство с именем длиннее 1 символа
   \PP     Найдет не-P
   \P{...} Найдет отсутвие Юникодного свойства с именем длиннее 1 символа
   \X      Найдет Юникодный расширенный графема кластер

символьные классы POSIX и их Unicode и Perl эквиваленты :

            ASCII-         Full-
   POSIX    range          range    backslash
 [[:...:]]  \p{...}        \p{...}   sequence    Description

 -----------------------------------------------------------------------
 alnum   PosixAlnum       XPosixAlnum            Алфавитный символ плюс Цифра
 alpha   PosixAlpha       XPosixAlpha            Алфавитный символ
 ascii   ASCII                                   Любой ASCII символ
 blank   PosixBlank       XPosixBlank   \h       Горизонтальный пробел;
                                                   полный спектр также
                                                   записывается как
                                                   \p{HorizSpace} (GNU
                                                   расширение)
 cntrl   PosixCntrl       XPosixCntrl            Знак Контрола
 digit   PosixDigit       XPosixDigit   \d       Десятичные цифры
 graph   PosixGraph       XPosixGraph            Алфавитный символ плюс Пунктуация
 lower   PosixLower       XPosixLower            Строчные буквы
 print   PosixPrint       XPosixPrint            Graph плюс Print, без
                                                   нескольких Control символов
 punct   PosixPunct       XPosixPunct            Пунктуация и Символы
                                                   в ASCII-диапазоне; просто
                                                   пунктуация за ее пределами
 space   PosixSpace       XPosixSpace            [\s\cK]
         PerlSpace        XPerlSpace    \s       Perl пробельный символ
 upper   PosixUpper       XPosixUpper            Прописные буквы (в верхнем регисте)
 word    PosixWord        XPosixWord    \w       Цифры, буквы + знаки Юникода +
                                                   соединители, такие как '_'
                                                   (Perl расширение)
 xdigit  ASCII_Hex_Digit  XPosixDigit            Шестнадцатиричные цифрв,
                                                    ASCII-диапазон
                                                    [0-9A-Fa-f]

Кроме того, различные синонимы такие как \p{Alpha} для \p{XPosixAlpha}; все перечисленные в "Свойства, доступные через \p{} и \P{}" in perluniprops

Внутри класса символов:

    POSIX      traditional   Unicode
  [:digit:]       \d        \p{Digit}
  [:^digit:]      \D        \P{Digit}

ЯКОРЯ

Все утверждения нулевой ширины.

   ^  Найдет начало строки (или линии при /m)
   $  Найдет конец строки (или линии при /m) или перед новой строкой
   \b Найдет границу слова (между \w и \W)
   \B Найдет за исключением границы слова (между  \w и \w или \W и \W)
   \A Найдет начало строки (независимо от /m)
   \Z Найдет конец строки (перед вероятным знаком новой строки)
   \z Найдет абсолютный конец строки
   \G Найдет, где остановился предыдущий m//g
   \K Сохраняет найденный материал слева от \K, не включая его в $&

ПОВТОРИТЕЛИ (КВАНТИФИКАТОРЫ)

Повторители жадные по умолчанию и захватывают длиннейшую часть слева.

   Максима Минимал Притяжатель Допустимый диапазон
   ------- ------- ---------- -------------
   {n,m}   {n,m}?  {n,m}+     Совпадение по кр мере n раз
                              но не более, чем m раз
   {n,}    {n,}?   {n,}+      По крайней мере n раз
   {n}     {n}?    {n}+       Должен найти ровно n раз
   *       *?      *+         0 или более раз (также как {0,})
   +       +?      ++         1 или более раз (также как {1,})
   ?       ??      ?+         0 или 1 раз (также как {0,1})

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

Существует не повторитель {,n}. Это интерпретируется как строковая константа.

РАСШИРЕННЫЕ КОНСТРУКЦИИ

   (?#text)          Комментария
   (?:...)           Группировка без захвата (кластеризации)
   (?pimsx-imsx:...) Включить/отключить опцию (в соответствии с модификатором m//)
   (?=...)           Утверждение положительного просмотра вперед нулевой ширины
   (?!...)           Утверждение отрицательного просмотра вперед нулевой ширины
   (?<=...)          Утверждение положительного просмотра назад нулевой ширины
   (?<!...)          Утверждение отрицательного просмотра назад нулевой ширины
   (?>...)           Возьмите то, что мы можем, запрещает использование поиска с возвратом
   (?|...)           Сброс ветвления
   (?<name>...)      Именованный захват
   (?'name'...)      Именованный захват
   (?P<name>...)     Именованный захват (синтакс питона)
   (?{ code })       Встроенный код, возвращаемое значение становится $^R
   (??{ code })      Динамический регекс, возвращаемое значение используется как регекс
   (?N)              Рекурсивно в подобразец номер N
   (?-N), (?+N)      Рекурсивно в N-нный предыдущий/следующий подобразец
   (?R), (?0)        Рекурсия сначала всего шаблона
   (?&name)          Рекурсия в именованный подобразец
   (?P>name)         Рекурсия в именованный подобразец (питоновский синтакс)
   (?(условие)да|нет)
   (?(условие)да)      Условное выражение, где "условие" может быть:
                     (?=pat)   смотреть вперед
                     (?!pat)   отрицание смотра вперед
                     (?<=pat)  смотреть назад
                     (?<!pat)  отрицание смотра назад
                     (N)       подшаблон N раз что-то нашел
                     (<name>)  именованный подшаблон что-то нашел
                     ('name')  именованный подшаблон что-то нашел
                     (?{code}) условие из кода
                     (R)       правда, если рекурсия
                     (RN)      правда, если рекурсия в N-ном подшаблоне
                     (R&name)  правда, если рекурсия в именованном подшаблоне
                     (DEFINE)  всегда имеет значение ложь, разрешается не no шаблону

ПЕРЕМЕННЫЕ

   $_    Переменная для использования по умолчанию

   $`    Все перед найденной строкой
   $&    Найденная строка
   $'    Все после найденной строки

   ${^PREMATCH}   Все перед найденной строкой
   ${^MATCH}      Найденная строка
   ${^POSTMATCH}  Все после найденной строки

Использование $`, $& или $' будет замедлять использование всех регексов в рамках программы. Посмотрите в perlvar на @- чтобы увидеть эквивалент выражения, которое не вызывают замедления. Смотрите также Devel::SawAmpersand. Начиная с Perl 5.10, вы можно также использовать эквивалентные переменные ${^PREMATCH}, ${^MATCH} и ${^POSTMATCH}, но, чтобы их определить, нужно в регулярном выражении указать модификатор /p (preserve сохранить).

   $1, $2 ...  удерхивает X-ное захваченное выражение
   $+    Последнее найденное скобочное выражение
   $^N   Сохраняет самый близкое захваченное выражение
   $^R   Сохраняет результат последнего (?{...}) выражения
   @-    Смещение от начала группировки. $-[0] содержит найденное выражение целиком
   @+    Смещение от конца группировки. $+[0] сохраняет остаток от найденного
   %+    Именованные захваченные группы
   %-    Именованные захваченные группы, как ссылка на массив

Захваченные группы пронумеровываются согласно их открытой скобке.

ФУНКЦИИ

   lc          Строку в нижний регистр
   lcfirst     В нижний регистр первый символ строки
   uc          Строку в верхний регистр
   ucfirst     В верхний регистр первый символ строки
   fc          Сделать регистронезависимую строку (для сравнения)

   pos         Вернуть или установить текущее положение поиска
   quotemeta   Квотировать метасимволы
   reset       Сбросить статус ?шаблона?
   study       Анализировать строку для оптимизации поиска

   split       Использование регекса для разбиения строки на части

Первые пять из них, как escape-последовательности \L, \l, \U, \u, и \F. Для заголовочного регистра, см "Titlecase"; Для Регистронезависимого, см "Foldcase".

ТЕРМИНОЛОГИЯ

Titlecase

В концепции Unicode он чаще всего равен верхнему регистру, но для некоторых символов, таких как немецкий "sharp s"(резкое s - ß) это не так.

Foldcase

Юникодная форма полезна при сравнении строк независимо от регистра, но некоторые символы имеют разветвленную систему сопоставления регистра один ко многим. Прежде всего вариант нижнего регистра.

АВТОР

Iain Truskett. Обновлено портировщиками Perl 5.

Этот документ может распространяться на тех же условиях, как и сам Perl.

СМОТРИТЕ ТАКЖЕ

  • perlretut учебник по регулярным выражениям.

  • perlrequick для быстрого изучения.

  • perlre для более подробной информации.

  • perlvar дополнительные сведения о переменных.

  • perlop дополнительные сведения об операторах.

  • perlfunc дополнительные сведения о функциях.

  • perlfaq6 часто задаваемые вопросы о регулярных выражениях.

  • perlrebackslash для справки о последовательностях с обратной косой чертой.

  • perlrecharclass для справки о классах символов.

  • Модуль re, изменяющий поведение и помогающий отладке.

  • "Отладка регулярных выражений" in perldebug

  • perluniintro, perlunicode, charnames и perllocale для подробной информации о регулярные выражениях и интернационализации.

  • Мастеринг регулярных выражений Jeffrey Friedl (http://oreilly.com/catalog/9780596528126/) для тщательного изучения и ссылки на главы.

СПАСИБО

David P.C. Wollmann, Richard Soderberg, Sean M. Burke, Tom Christiansen, Jim Cromie, и Jeffrey Goff за полезные советы.

ПЕРЕВОДЧИКИ

  • Николай Мишин <mishin@cpan.org>