Языки программирования Регекспы

advertisement
Регулярные выражения
Определим следующие операции над множествами:
Тогда регулярные выражения над алфавитом T и языки, представляемые
ими, могут быть определены следующим образом:
– Символ Λ, представляющий пустое множество, является регулярным
выражением.
– ε является регулярным выражением и представляет множество {ε}.
– Для каждого символа a ∈ T a является регулярным выражением и
представляет множество {a}.
– Если p и q – регулярные выражения, представляющие множества P и Q, то
(pq), (p+q) и (p*) являются регулярными
Регулярные выражения как средство
поиска текстовых фрагментов
Представление буквенно-цифровых символов
Большинство символов, таких как буквы или цифры, представляют сами себя.
Представление пробельных символов
Представление специальных символов
Символ
Представление
Символ
Представление
*
\*
+
\+
\
\\
[
\[
]
\]
\f
Символ конца
страницы (FF)
\n
Символ перевода
строки (LF)
\r
Символ возврата
каретки (CR)
\s
Символ пробела.
Эквивалентно [
\f\n\r\t\v]
\S
Непробельный
символ.
Эквивалентно [^
\f\n\r\t\v]
\t
Символ табуляции
(HT)
Представление символов по их коду
Представление
Кодирование
\0n
n — Восьмеричное число, не большее 377
\xn
n — Шестнадцатеричное число из двух цифр, соответствует символу с данным
кодом
\un
n — Шестнадцатеричное число из четырех цифр, соответствует символу Unicode
Поиск повторяющихся последовательностей символов (квантификация)
Позиция внутри строки
Обозначение
Число повторений
*
Ноль или более
Представление
Позиция
+
Одно или более
^
Начало строки
?
Ноль или один раз
$
Конец строки
{n}
\b
Граница слова
В точности n
соответствий
\B
Не граница слова
{n,}
n или более
соответствий
{n, m}
Минимум n и
максимум m
соответствий
Наборы символов
Метаси
мвол
Заменяет
Значение
\d
[0-9]
Цифра
\D
[^0-9]
Не цифра
\w
[A-Za-zА-Яа-я0-9_]
Символы образующие «слово» (буквы,
цифры и символ подчёркивания)
\W
[^A-Za-zА-Яа-я0-9_]
Символы не образующие «слово»
Перечисление
Вертикальная черта разделяет допустимые варианты.
Например, «gray|grey» соответствует gray или grey.
Группировка
Круглые скобки используются для определения области действия и приоритета операций.
Например, «gray|grey» и «gr(a|e)y» являются разными образцами,
но они оба описывают множество, содержащее gray и grey.
«Жадные» и «ленивые» выражения
• *? — «не жадный» («ленивый») эквивалент *
• +? — «не жадный» («ленивый») эквивалент +
• {n,}? — «не жадный» («ленивый») эквивалент {n,}
Варианты регулярных выражений
•
Традиционные регулярные выражения в Unix
Синтаксис «базовых» регулярных выражений (BRE) на данный момент
определён POSIX как устаревший, но он до сих пор широко распространён из
соображений обратной совместимости. Многие Unix-утилиты используют
такие регулярные выражения по умолчанию.
•
Расширенные регулярные выражения в стандарте POSIX
Синтаксис расширенных (extended) регулярных выражений POSIX (ERE) в
основном аналогичен традиционному. Было отменено использование
обратной косой черты для метасимволов: {…} вместо \{…\} и (…) вместо \(…\).
Обратная косая черта перед метасимволом в расширенных выражениях
отменяет его специальное значение
•
Perl-совместимые регулярные выражения (PCRE)
Регулярные выражения в Perl имеют более богатый и в то же время
предсказуемый синтаксис, чем даже в POSIX. По этой причине очень многие
приложения используют именно Perl-совместимый синтаксис регулярных
выражений.
Классы символов Posix
POSIX класс
PCRE
Значение
Описание
[:upper:]
[A-Z]
символы верхнего регистра
[:lower:]
[a-z]
символы нижнего регистра
[:alpha:]
[A-Za-z]
[:alnum:]
\w
[A-Za-z0-9]
[:digit:]
\d
[0-9]
[:xdigit:]
[0-9A-Fa-f]
[:punct:]
[.,!?:…]
[:blank:]
[ \t]
[:space:]
\s
[ \t\n\r\f\v]
[:cntrl:]
[:graph:]
[:print:]
символы верхнего и нижнего регистра
цифры, символы
регистра
верхнего
и
цифры
шестнадцатеричные цифры
знаки пунктуации
пробел и TAB
символы пропуска
символы управления
\S
[^ \t\n\r\f\v] символы печати
[^\t\n\r\f\v]
символы печати и символы пропуска
нижнего
Синтаксис выражений замены PCRE
Символ
Значение
$цифра
Заменяет на группу с заданным номером (нумерация с 1). Группа 0 соответствует всей
найденной подстроке
${группа}
Заменяет на группу с заданным именем, т.е. ранее помеченную как (?<группа>e)
$$
Заменяет на символ $
$&
Заменяет на всю найденную подстроку (совпадает с $0)
$`
Заменяет на текст перед найденной подстрокой
$'
Заменяет на текст после найденной подстроки
$+
Заменяет на последнюю найденную строку
$_
Заменяет на всю входную строку
Примеры регулярных выражений
•
HTML tag (Matches any opening or closing HTML tag, without its contents.)
</?[a-z][a-z0-9]*[^<>]*>
•
URL: Find in full text (The final character class makes sure that if an URL is part of some text,
punctuation such as a comma or full stop after the URL is not interpreted as part of the URL.)
\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]
•
Security: ASCII code characters incl. tab and CRLF (Matches any single non-printable code
character that may cause trouble in certain situations. Includes tabs and line breaks.)
[\x00-\x1F]
•
Programming: String (Quotes may not appear in the string. The string cannot span multiple
lines.)
"[^"\r\n]*"
Download