Шпаргалка по регулярным выражениям
Квантификаторы
Аналог | Пример | Описание | |
---|---|---|---|
? | a? | одно или ноль вхождений «а» | |
+ | a+ | одно или более вхождений «а» | |
* | a* | ноль или более вхождений «а» |
Модификаторы
Символ «минус» (-) меред модификатором (за исключением U) создаёт его отрицание.
Спецсимволы
Аналог | Описание | |
---|---|---|
() | подмаска, вложенное выражение | |
[] | групповой символ | |
количество вхождений от «a» до «b» | ||
| | логическое «или», в случае с односимвольными альтернативами используйте [] | |
\ | экранирование спец символа | |
. | любой сивол, кроме перевода строки | |
\d | 6 | десятичная цифра |
\D | [^\d] | любой символ, кроме десятичной цифры |
\f | конец (разрыв) страницы | |
\n | перевод строки | |
\pL | буква в кодировке UTF-8 при использовании модификатора u | |
\r | возврат каретки | |
\s | [ \t\v\r\n\f] | пробельный символ |
\S | [^\s] | любой символ, кроме промельного |
\t | табуляция | |
\w | [0-9a-z_] | любая цифра, буква или знак подчеркивания |
\W | [^\w] | любой символ, кроме цифры, буквы или знака подчеркивания |
\v | вертикальная табуляция |
Спецсимволы внутри символьного класса
Пример | Описание | |
---|---|---|
^ | [^da] | отрицание, любой символ кроме «d» или «a» |
— | [a-z] | интервал, любой симво от «a» до «z» |
Позиция внутри строки
Якоря
Якоря в регулярных выражениях указывают на начало или конец чего-либо. Например, строки или слова. Они представлены определенными символами. К примеру, шаблон, соответствующий строке, начинающейся с цифры, должен иметь следующий вид:
Здесь символ ^ обозначает начало строки. Без него шаблон соответствовал бы любой строке, содержащей цифру.
Символьные классы
Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, \d соответствует любой цифре от 0 до 9 включительно, \w соответствует буквам и цифрам, а \W — всем символам, кроме букв и цифр. Шаблон, идентифицирующий буквы, цифры и пробел, выглядит так:
POSIX
POSIX — это относительно новое дополнение семейства регулярных выражений. Идея, как и в случае с символьными классами, заключается в использовании сокращений, представляющих некоторую группу символов.
Утверждения
Поначалу практически у всех возникают трудности с пониманием утверждений, однако познакомившись с ними ближе, вы будете использовать их довольно часто. Утверждения предоставляют способ сказать: «я хочу найти в этом документе каждое слово, включающее букву “q”, за которой не следует “werty”».
Итак, парсер проверяет несколько следующих символов по предложенному шаблону ( werty ). Если они найдены, то утверждение ложно, а значит символ q будет «проигнорирован», т. е. не будет соответствовать шаблону. Если же werty не найдено, то утверждение верно, и с q все в порядке. Затем продолжается поиск любых символов, кроме пробела ( [^\s]* ).
Кванторы
Кванторы позволяют определить часть шаблона, которая должна повторяться несколько раз подряд. Например, если вы хотите выяснить, содержит ли документ строку из от 10 до 20 (включительно) букв «a», то можно использовать этот шаблон:
Этот шаблон соответствует тексту, заключенному в двойные кавычки. Однако, ваша исходная строка может быть вроде этой:
Приведенный выше шаблон найдет в этой строке вот такую подстроку:
Он оказался слишком жадным, захватив наибольший кусок текста, который смог.
Экранирование в регулярных выражениях
Знак экранирования, предшествующий символу вроде точки, заставляет парсер игнорировать его функцию и считать обычным символом. Есть несколько символов, требующих такого экранирования в большинстве шаблонов и языков. Вы можете найти их в правом нижнем углу шпаргалки («Мета-символы»).
Шаблон для нахождения точки таков:
Другие специальные символы в регулярных выражениях соответствуют необычным элементам в тексте. Переносы строки и табуляции, к примеру, могут быть набраны с клавиатуры, но вероятно собьют с толку языки программирования. Знак экранирования используется здесь для того, чтобы сообщить парсеру о необходимости считать следующий символ специальным, а не обычной буквой или цифрой.
Спецсимволы экранирования в регулярных выражениях
Подстановка строк
Подстановка строк подробно описана в следующем параграфе «Группы и диапазоны», однако здесь следует упомянуть о существовании «пассивных» групп. Это группы, игнорируемые при подстановке, что очень полезно, если вы хотите использовать в шаблоне условие «или», но не хотите, чтобы эта группа принимала участие в подстановке.
Группы и диапазоны
Группы и диапазоны очень-очень полезны. Вероятно, проще будет начать с диапазонов. Они позволяют указать набор подходящих символов. Например, чтобы проверить, содержит ли строка шестнадцатеричные цифры (от 0 до 9 и от A до F), следует использовать такой диапазон:
Чтобы проверить обратное, используйте отрицательный диапазон, который в нашем случае подходит под любой символ, кроме цифр от 0 до 9 и букв от A до F:
Группы наиболее часто применяются, когда в шаблоне необходимо условие «или»; когда нужно сослаться на часть шаблона из другой его части; а также при подстановке строк.
Использовать «или» очень просто: следующий шаблон ищет «ab» или «bc»:
Первым параметром будет примерно такой шаблон (возможно вам понадобятся несколько дополнительных символов для этой конкретной функции):
Он найдет любые вхождения слова «wish» вместе с предыдущим и следующим символами, если только это не буквы или цифры. Тогда ваша подстановка может быть такой:
Модификаторы шаблонов
Модификаторы шаблонов используются в нескольких языках, в частности, в Perl. Они позволяют изменить работу парсера. Например, модификатор i заставляет парсер игнорировать регистры.
Регулярные выражения в Perl обрамляются одним и тем же символом в начале и в конце. Это может быть любой символ (чаще используется «/»), и выглядит все таким образом:
Модификаторы добавляются в конец этой строки, вот так:
Мета-символы
Наконец, последняя часть таблицы содержит мета-символы. Это символы, имеющие специальное значение в регулярных выражениях. Так что если вы хотите использовать один из них как обычный символ, то его необходимо экранировать. Для проверки наличия скобки в тексте, используется такой шаблон:
Шпаргалка представляет собой общее руководство по шаблонам регулярных выражений без учета специфики какого-либо языка. Она представлена в виде таблицы, помещающейся на одном печатном листе формата A4. Создана под лицензией Creative Commons на базе шпаргалки, автором которой является Dave Child. Скачать в PDF, PNG.
Элементы языка регулярных выражений — краткий справочник
В каждом разделе этого краткого справочника приводится перечень конкретной категории символов, операторов и конструкций, которые можно использовать для задания регулярных выражений.
Мы также представили эту информацию в двух форматах, чтобы вы могли ее скачать и распечатать для справки:
Escape-знаки
Обратная косая черта (\) в регулярных выражениях указывает, что следующий за ней символ либо является специальным знаком (как показано в следующей таблице), либо должен интерпретироваться буквально. Дополнительные сведения см. в разделе Escape-символы.
Классы символов
Класс символов соответствует какому-либо одному набору символов. Классы символов состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Классы символов.
Класс знаков | Описание | Шаблон | Число соответствий | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
[ character_group ] | Соответствует любому одиночному символу, входящему в character_group. По умолчанию при сопоставлении учитывается регистр. | [ae] | «a» в «gray» Для сопоставления символа точки (. или \u002E ) перед ней нужно поставить дополнительную обратную косую черту ( \. ). | a.e | «ave» в «nave» «ate» в «water» | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\p< имя > | Соответствует любому одиночному символу в общей категории Юникода или в именованном блоке, указанном в параметре имя. | \p ПривязкиПривязки, или атомарные утверждения нулевой ширины, приводят к успеху или сбою сопоставления, в зависимости от текущей позиции в строке, но не предписывают обработчику перемещаться по строке или обрабатывать символы. Метасимволы, приведенные в следующей таблице, являются привязками. Дополнительные сведения см. в разделе Привязки. Конструкции группированияКонструкции группирования отображают части выражений регулярных выражений и обычно захватывают части строки входной строки. Конструкции группирования состоят из языковых элементов, приведенных в следующей таблице. Для получения дополнительной информации см. Конструкции группирования. КвантификаторыКвантор указывает количество вхождений предшествующего элемента (знака, группы или класса знаков), которое должно присутствовать во входной строке, чтобы было зафиксировано соответствие. Кванторы состоят из языковых элементов, приведенных в следующей таблице. Для получения дополнительной информации см. Квантификаторы. Конструкции обратных ссылок
Конструкции чередованияКонструкции изменения модифицируют регулярное выражение, включая сопоставление по принципу «либо-либо». Такие конструкции состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Конструкции чередования. ПодстановкиПодстановки — это языковые элементы регулярных выражений, которые поддерживаются в шаблонах замены. Для получения дополнительной информации см. Подстановки. Приведенные в следующей таблице метасимволы являются атомарными утверждениями нулевой ширины.
Параметры регулярных выраженийМожно определить параметры, управляющие интерпретацией шаблона регулярного выражения обработчиком регулярных выражений. Многие из этих параметров можно указать в шаблоне регулярного выражения либо в виде одной или нескольких констант RegexOptions. Этот краткий справочник перечисляет только встраиваемые параметры. Дополнительные сведения о встроенных параметрах и параметрах RegexOptions см. в статье Параметры регулярных выражений. Встроенный параметр можно задать двумя способами: Прочие конструкцииСимвольные классыДля этого мы можем найти и удалить все, что не является числом. С этим нам помогут символьные классы. Символьный класс – это специальное обозначение, которое соответствует любому символу из определённого набора. Для начала давайте рассмотрим класс «цифра». Он обозначается как \d и в регулярном выражении соответствует «любой одной цифре». Например, давайте найдём первую цифру в номере телефона: Это был символьный класс для цифр. Есть и другие символьные классы. Регулярное выражение может содержать как обычные символы, так и символьные классы. Например, CSS\d соответствует строке CSS с цифрой после неё: Также мы можем использовать несколько символьных классов: Соответствие (каждому символьному классу соответствует один символ результата): Обратные символьные классыДля каждого символьного класса существует «обратный класс», обозначаемый той же буквой, но в верхнем регистре. «Обратный» означает, что он соответствует всем другим символам, например: Мы уже видели, как сделать чисто цифровой номер из строки вида +7(903)-123-45-67 : найти все цифры и соединить их. Альтернативный, более короткий путь – найти нецифровые символы \D и удалить их из строки: Точка – это любой символИли в середине регулярного выражения: Обратите внимание, что точка означает «любой символ», но не «отсутствие символа». Там должен быть какой-либо символ, чтобы соответствовать условию поиска: Точка как буквально любой символ, с флагом «s»Но во многих ситуациях точкой мы хотим обозначить действительно «любой символ», включая перевод строки. Но если регулярное выражение не учитывает пробелы, оно может не сработать. Давайте попробуем найти цифры, разделённые дефисом: Пробел – это символ. Такой же важный, как любой другой. Нельзя просто добавить или удалить пробелы из регулярного выражения, и ожидать, что оно будет также работать. Другими словами, в регулярном выражении все символы имеют значение, даже пробелы. ИтогоСуществуют следующие символьные классы: В кодировке Юникод, которую JavaScript использует для строк, каждому символу соответствует ряд свойств, например – какого языка это буква (если буква), является ли символ знаком пунктуации, и т.п. Регулярные выражения (RegEx)¶Вступление¶С помощью регулярных выражений вы можете проверять пользовательский ввод, искать некоторые шаблоны, такие как электронные письма телефонных номеров на веб-страницах или в некоторых документах и так далее. Ниже приведена исчерпывающая шпаргалка по регулярных выражениям всего на одной странице. Символы¶Простые совпадения¶Серия символов соответствует этой серии символов во входной строке.
Непечатные символы (escape-коды)¶Для представления непечатаемого символа в регулярном выражении используется \x с шестнадцатеричным кодом. Если код длиннее 2 цифр (более U+00FF), то он обрамляется в фигурные скобки.
Существует ряд предопределенных escape-кодов для непечатных символов, как в языке C :
Классы символов¶Пользовательские классы¶Если вы хотите буквально использовать символ ] поместите его в начало списка или escape обратной косой чертой. Метаклассы¶Существует ряд предопределенных классов символов, которые делают регулярные выражения более компактными. Их называют метаклассы:
Обратите внимание, что в последовательности \x0D\x0A нет пустой строки. Многострочная обработка может быть настроена с помощью свойств LineSeparators и LinePairedSeparator. Таким образом, вы можете использовать разделители стиля Unix \n или стиль DOS / Windows \r\n или смешивать их вместе (как описано выше по умолчанию). Если вы предпочитаете математически правильное описание, вы можете найти его на сайте www.unicode.org. Разделители слов¶
Повторы¶Повтор¶За любым элементом регулярного выражения может следовать допустимое число повторений элемента. То есть цифры в фигурных скобках Теоретически значение n и m не ограничены (можно использовать максимальное значение для 32-х битного числа). Жадность¶
Вы можете переключить все повторы в не жадный режим (modifier /g, ниже мы используем in-line модификатор change).
Сверхжадные повторы (Possessive Quantifier)¶Полное описание (на английском) Вкратце, сверхжадный повтор ускоряет работу в сложных случаях. Альтернативы¶Звучит сложно, поэтому обычной практикой является заключение списка альтернатив в скобки, чтобы минимизировать путаницу относительно того, где он начинается и заканчивается. Выражения в списке альтернатив пробуются слева направо, принимается первое же совпадение.
Группы (подвыражения)¶Скобки (. ) также могут использоваться для определения групп (подвыражений) регулярного выражения. Позиция, длина и фактические значения подвыражений будут в MatchPos, MatchLen и Match. Вы можете заменить их с помощью функции Substitute. Например, для входной строки foobar регулярное выражение (foo(bar)) найдет:
Ссылки на группы (Backreferences)¶
([‘»]?)(\d+)\1 соответствует «13» (в двойных кавычках) или ‘4’ (в одинарных кавычках) или 77 (без кавычек) и т. д. Именованные группы (подвыражения) и ссылки на них¶
Модификаторы¶Модификаторы предназначены для изменения поведения регулярных выражений. Вы можете установить модификаторы глобально в вашей системе или изменить их внутри регулярного выражения, используя (?imsxr-imsxr). Для изменения модификаторов используйте ModifierStr или соответствующие TRegExpr свойства Модификатор *. i, без учета регистра¶Регистро-независимые сравнения. Использует установленные в вашей системе языковые настройки, см. также InvertCase. m, многострочные строки¶s, одиночные строки¶Смотрите также Разделители строк, которые обычно не совпадают. г, жадность¶Специфичный для TRegExpr модификатор. x, расширенный синтаксис¶Позволяет комментировать регулярные выражения и разбивать их на несколько строк. Если модификатор включен, мы игнорируем все пробелы, которые не заэскейплены обратной косой чертой, и не включены в класс символов. Также символ # отделяет комментарии. Обратите внимание, что вы можете использовать пустые строки для форматирования регулярного выражения для лучшей читаемости: Это также означает, что если вам нужно вставить пробел или символ # в шаблон (вне класса символов, где они не затрагиваются /x ), вам придется либо эскейпить их, либо кодировать, используя шестнадцатеричный код. г, русские диапазоны¶Специфичный для TRegExpr модификатор. В русской таблице ASCII символы ё / Ё размещаются отдельно от других. Большие и маленькие русские символы находятся в отдельных диапазонах, это не отличается от ситуации с английскими символами, но, тем не менее, я хотел иметь краткую форму. Когда модификатор включен:
Проверки или заглядывания вперед и назад (Assertions)¶Заглядывание вперед (lookahead assertion) foo(?=bar) совпадает «foo» только перед «bar», при этом сама строка «bar» не войдет в найденный текст. Отрицательное заглядывание вперед (negative lookahead assertion): foo(?!bar) совпадает «foo» только если после этой строки не следует «bar». Ретроспективная проверка (lookbehind assertion): (? совпадает «bar» только после «foo», при этом сама строка «foo» не войдет в найденный текст. Отрицательное заглядывание вперед (negative lookahead assertion): foo(?!bar) совпадает «bar» только если перед этой строки нет «foo». Не захватываемые группы (подвыражения)¶У этих групп (подвыражений) нет номера, их нельзя указать в ссылке на группу. Эти группы используют чтобы за счет группировки сделать регулярное выражение более читаемым, но нет необходимости расходовать ресурсы на то, чтобы реально отдельно захватывать то, с чем такие группы совпадут:
Атомарные группы¶Атомарные группы это специальный случай незахватывающих групп. Подробнее Модификаторы¶Комментарии¶Рекурсия¶Выражение a(?R)?z совпадает с одним или более символом «a» за которым следует точно такое же число символов «z». Вызовы подвыражений¶Нумерованные группы (подвыражения) обозначают (?1) … (?90) (максимальное число групп определяется константой в TRegExpr). Это похоже на рекурсию, но повторяет только указанную группу (подвыражение). Unicode категории (category)¶Метасимвол \p это один символ указанной Unicode категории (category). Синтаксис: \pL или \p Метасимвол \P это символ не из Unicode категории (category). Эти метасимволы также поддерживаются внутри пользовательских классов. Послесловие¶В этой древней статье из прошлого века есть примеры использования регулярных выражений. |