Сводная таблица метасимволов.
метасимвол | значение |
[abc] | любой из символов a, b, или c |
[^abc] | все кроме символов a, b, или c. |
[a-z] | любой символ ASCII между a и z. |
\d \D | цифра; не цифра. |
\w \W | любой допустимый в слове символ;не допустимый в слове символ |
\s \S | пробельный символ; не пробельный символ. |
\b | граница между \w символом и \W символом. |
. | любой символ (кроме новой строки). |
(abc) | фраза ‘abc’ как группа. |
? | предшествующие группа или символ повторяются 0 или 1 раз. |
+ | предшествующие группа или символ повторяются 1 и более раз. |
* | предшествующие группа или символ повторяются 0 и более раз. |
{x,y} | предшествующие группа или символ могут повторятся от x до y раз. |
{,y} | предшествующие группа или символ могут повторятся не более y раз. |
{x,} | предшествующие группа или символ могут повторятся более x раз. |
{x} | предшествующие группа или символ повторяется x раз. |
Жадность квантификаторовСинтаксис:(шаблон)+?
(шаблон)*?
Метасимволы + и * являются жадными по умолчанию и пытаются найти максимально большое соответствие в строке, изменить их поведение позволяет ‘?’, который необходимо расположить сразу после квантификатора.Операторы сопоставленияСоответствие — m //
Синтаксис: m/шаблон/
Осуществляет поиск шаблона в тексте, возвращает true, если шаблон найден (при использовании разделителей // не обязателен).
Применимы следующие модификаторы: g, i, m, o, s, x
Замена – s///
Синтаксис: s/шаблон1/шаблон2/
Осуществляет поиск в тексте шаблона1 с заменой на шаблон2, возвращает true, если замена состоялась.
Применимы следующие модификаторы: e,g, i, m, o, s, x
Транслитерация – tr/// или y///
Синтаксис: tr/шаблон1/шаблон2/
y/шаблон1/шаблон2/
Осуществляет поиск в тексте символов из шаблона1 и заменяет на соответствующие в шаблоне2, возвращает общее количество произведенных замен (при повторении символов в шаблоне1 для замены используется первое совпадение например tr/abbc/xyz/ соответсвует tr/abc/xyz/.
Применимы следующие модификаторы: c, d, s
Разделители
В качестве разделителей могут выступать различные символы ‘не-слова’ такие как <>,(),[],{} и т.д. например:
s<шаблон1><шаблон2>
и
s#шаблон1#шаблон2#
оба эквивалентны
s/шаблон1/шаблон2/Операторы привязкиОператоры привязки =~
Синтаксис: $refstring =~ m/шаблон/
Проверяет на наличие совпадений в переменной отличной от $_. Возвращает true, если совпадение найдено.
Операторы отрицания !~
Синтаксис: $refstring !~ m/шаблон/
Проверяет на наличие совпадений в переменной отличной от $_. Возвращает true, если совпадение не найдено.
МодификаторыСоответствие и ЗаменаДанные модификаторы используются для изменения поведения операторов соответствия и замены.
Отмена сброса позиции — /c
Используется только вместе с модификатором глобального поиска, т.е. //gc. Не сбрасывает позицию курсора, в начало строки, если соответствия не было найдено.
Вычислить замену — /е
Определяет, что шаблон замены является выражением, которое предварительно необходимо рассчитать.
Глобальный поиск — /g
Производит поиск всех вхождений шаблона в строке.
Не учитывать регистр — /i
Поиск шаблона идет без учета регистра.
Много строчный режим — /m
Для каждой строки в тексте учитываются символ начала(^) и конца($), иначе они бы воспринимались как начало и конец всего текста.
Одноразовое вычисление шаблона — /o
Если шаблон поиска содержит переменные, а поиск производиться в цикле, то значение шаблона будет рассчитано только один раз.
Однострочный режим — /s
Производит поиск всех вхождений шаблона в строке.
Свободная форма — /x
Игнорирует пробелы (‘ ‘), кроме описанных метасимволом \s. Позволяет добавлять комментарии внутри шаблона.
ТранслитерацияДанные модификаторы используются для изменения поведения операторов транслитерации.
Дополнение — /с
Производит замену всех символов, которых нет в шаблоне1.
Удаление — /d
Удаляет все найденные символы из шаблона1, для которых неопределенно значение в шаблоне2.
Сквош — /s
В момент замены, удаляет повторяющиеся символы
Локальные модификаторыСинтаксис:
/РегистроЗависимыйТекст((?i)РегистроНеЗависимыйТекст)РегистроЗависимыйТекст/
/РегистроНеЗависимыйТекст((?-i)РегистроЗависимыйТекст)РегистроНеЗависимыйТекст/i
Изменяют поведение модификаторов для отдельных участков шаблона поиска
модификатор | описание | положительный эффект | отрицательный эффект |
/i | Не учитывать регистр | (?i) | (?-i) |
/s | Однострочный режим | (?s) | (?-s) |
/m | Много строчный режим | (?m) | (?-m) |
/x | Свободная форма | (?x) | (?-x) |
Группировка и альтернатива| Альтернатива
Синтаксис: шаблон1|шаблон2
Разделяя шаблоны символом |, мы определяем, что поиск должен идти по одному или другому.
() Группировка и запоминание
Синтаксис: (шаблон)
Применяя скобки мы группируем элементы в шаблоне, а так же определяем оператору поиска запоминать найденные значения в нумерованных переменных ($1, $2, $3 и т. д.)
(?:) Не запоминать группировку
Синтаксис: (?:шаблон)
Данный синтаксис означает, что необходимо произвести группировку элементов в шаблоне без запоминания.Поиск с условием до/после(?=) Поиск с условием после
Синтаксис: шаблон1(?=шаблон2)
Данная запись означает, что необходимо искать шаблон1, за которым следует шаблон2, не запоминая шаблон2.
(?!) Поиск с условием нет после
Синтаксис: шаблон1(?!шаблон2)
Данная запись означает, что необходимо искать шаблон1, за которым не идет шаблон2, не запоминая шаблон2.
(?<=) Поиск с условием до
Синтаксис: шаблон1(?<=шаблон2)
Данная запись означает, что необходимо искать шаблон1, перед которым идет шаблон2, не запоминая шаблон2. шаблон2 должени быть фиксированной ширины.
(?<=) Поиск с условием нет до
Синтаксис: шаблон1(?<!шаблон2)
Данная запись означает, что необходимо искать шаблон1, перед которым не идет шаблон2, не запоминая шаблон2. шаблон2 должени быть фиксированной ширины.Переменные с результатом поиска
переменная | описание |
\число (число = 1, 2 …) | Внутри шаблона поиска \число возвращает подстроку, определенную в группированном выражении, которая соответствует номеру по счету. Например: (one|two)\1, найдет oneone или twotwo. |
$число (число = 1, 2 …) | В результатах поиска $число возвращает подстроку, определенную в группированном выражении, которая была найдена соответсвующей посчету |
$+ | Возвращает последнюю найденную подстроку, определенную в группированном выражении. |
$& | Возвращает всю строку, которая была определена поиском, включая группировки которые были помечены не для сохранения (?:) |
$` | Возвращает строку, которая была перед найденным $& |
$’ | Возвращает строку, которая была после найденного $& |
Другое(?#) Вставка комментария
Синтаксис: (?#текст комментария)
Позволяет добавлять комментарии внутри регулярного выражения, аналог модификатора /x.
Данная заметка является переводом «Приложения A» книги «Beginning Perl «.