Проверка регулярного выражения: Редактор регулярных выражений (Regular Expression Editor)
Опережающие и ретроспективные проверки в регулярных выражениях | Регулярные выражения
Обновл. 7 Мар 2020 |
В этом уроке мы рассмотрим группирование, обратные ссылки, опережающие и ретроспективные проверки, а также чередование с оператором ИЛИ. И, как всегда, проиллюстрируем это всё на практических примерах.
Группирование
Мы можем сгруппировать несколько символов в нашем регулярном выражении, используя круглые скобки ()
. Затем мы можем делать разные вещи с этой группой символов (например, добавить мультипликаторы).
Допустим, нам нужно узнать, упоминается ли какой-то конкретный человек. Его могут звать Джон Реджинальд Смит, но второе имя может присутствовать, а может и нет:
Регулярное выражение: John (Reginald )?Smith
Пример: John Reginald Smith is sometime just called John Smith.
Совет: Обратите внимание на пробелы в регулярном выражении выше. Важно помнить, что они являются частью вашего регулярного выражения, и вы должны убедиться, что они находятся в нужных местах.
Совет выше является очень важным, он указывает на распространённый источник проблем, возникающих при использовании регулярных выражений новичками. Например:
Регулярное выражение: John (Reginald)? Smith
Пример: Проблема с этим регулярным выражением заключается в том, что оно найдёт соответствие John Reginald Smith и даже John Smith (два пробела между John и Smith), но не найдёт соответствие в John Smith. Можете ли вы понять, почему?
Вы не ограничены только обычными символами в скобках. Вы можете использовать в скобках и метасимволы (включая мультипликаторы).
Например, нам нужно найти экземпляры IP-адресов. IP-адрес представляет собой набор из 4-х чисел (от 0 до 255), разделённых точками (например, 192.168.0.5
):
Регулярное выражение: \b(\d{1,3}\.){3}\d{1,3}\b
Пример: The server has an address of 10.18.0.20 and the printer has an address of 10.18.0.116.
Это уже немного сложнее, поэтому давайте разберёмся детальнее:
\b
обозначает границу слова;
здесь мы разбили IP-адрес на 3 части, состоящие из чисел от 0 до 255 + точки + последнее (4-е) число от 0 до 255;
в скобках мы обрабатываем первые 3 части IP-адреса: \d{1,3}
указывает на то, что мы ищем от 1 до 3 цифр + точку, следующую за этими цифрами, которую мы не забываем экранировать (\.
). Мы ищем ровно 3 таких последовательности, поэтому указываем мультипликатор {3}
сразу за скобками;
наконец, мы ищем 4-е число, указывая \d{1,3}
, и обозначаем конечную границу слова (\b
).
Обратные ссылки
Всякий раз, когда мы сопоставляем что-либо в круглых скобках, это значение фактически сохраняется в переменной, к которой мы можем обратиться позже в регулярном выражении. Для доступа к этой переменной мы используем escape-символ (\
), за которым следует цифра. Первый набор скобок обозначается как \1
, второй — \2
и т.д.
Допустим, нам нужно найти строки с двумя упоминаниями о человеке с фамилией Smith. При этом, мы не знаем его имени. Мы могли бы сделать следующее:
Регулярное выражение: (\b[A-Z]\w+\b) Smith.*\1 Smith
Пример: Harold Smith went to meet John Smith but John Smith was not there.
В примере выше мы сопоставляем текст между двумя экземплярами Джона Смита, но, в этом случае, это нормально, поскольку мы не слишком обеспокоены тем, что было сопоставлено, нам важно только наличие совпадения.
Чередование и оператор ИЛИ
При чередовании мы имеем возможность искать что-либо из указанного нами списка. Мы видели очень простой пример чередования с использованием оператора диапазона. Это позволяет нам выполнять поиск одного символа, но иногда нам может быть нужно выполнить операцию и с большим набором символов. Это делается с помощью оператора ИЛИ (|
). Например, нам нужно найти все экземпляры dog
или cat
:
Регулярное выражение: dog|cat
Пример: Harold Smith has two dogs and one cat.
Мы также можем использовать несколько операторов ИЛИ для использования большего количества вариантов:
Регулярное выражение: dog|cat|bird
Пример: Harold Smith has two dogs, one cat and three birds.
Иногда нам может быть нужно, чтобы чередование происходило только с частью регулярного выражения. Для этого используются круглые скобки:
Регулярное выражение: (John|Harold) Smith
Пример: Harold Smith went to meet John Smith but instead bumped into Jane Smith.
Опережающие и ретроспективные проверки
Опережающие и ретроспективные проверки работают в одном из двух режимов:
позитивный — мы пытаемся найти что-то соответствующее;
негативный — мы пытаемся найти что-то несоответствующее.
Главная идея как опережающей, так и ретроспективной проверок состоит в том, чтобы посмотреть, есть ли что-то соответствующее (или несоответствующее), а затем отбросить результат (то, что было найдено).
Опережающая проверка
При опережающей проверке мы хотим заглянуть вперёд (отсюда и имя) нашей строки и посмотреть, соответствует ли она заданному шаблону или нет. Если соответствие найдено, то мы его игнорируем и продолжаем поиск.
Например, допустим, что нам нужно идентифицировать числа больше 4 000, но меньше 5 000. Эта задачка выглядит на первый взгляд простой, но, на самом деле, она чуть сложнее. Обычно, первым решением, которое возникает в уме, является:
Регулярное выражение: \b4\d\d\d\b
Пример: This looks promising with 4021 but unfortunately also matches 4000.
Теперь мы понимаем, что нам нужно искать число 4
, за которым следуют 3 цифры, и, хотя бы одна из этих цифр не должна быть нулём. Мы можем попробовать сделать следующее:
Регулярное выражение: \b4([1-9]\d\d|\d[1-9]\d|\d\d[1-9])\b
Пример: Now we will match 4010 but not 4000.
Да, мы используем чередование с тремя разными сценариями, в каждом из которых последовательность состоит из трёх цифр, и эти три цифры не должны быть нулями.
Теперь вы можете подумать, глядя на всё вышеизложенное, что регулярное выражение для всего лишь 4-х цифр получилось слишком громоздким. И подумайте о том, как оно увеличится, если вместо диапазона от 4 000 до 5 000 нам нужно будет искать совпадения в диапазоне от 40 000 до 50 000. Вы быстро убедитесь, что регулярное выражение выше работает, но оно не элегантно и не масштабируется.
Оказывается, что негативная опережающая проверка может решить такие проблемы довольно легко. Синтаксис негативной опережающей проверки:
(?!x)
Наша негативная опережающая проверка заключена в скобки и первыми двумя символами являются ?!
, символ х
мы заменяем на то, что не хотим найти.
Таким образом, мы можем решить задачу выше следующим образом:
Регулярное выражение: \b4(?!000)\d\d\d\b
Пример: Now we still match 4010 but not 4000.
Это может показаться немного запутанным, поэтому давайте разберёмся детальнее:
сначала мы ищем цифру 4
;
когда мы находим 4
, негативная опережающая проверка возвращает true, если следующие 3 символа не являются 000
;
если проверка возвращает true, то мы игнорируем текущий экземпляр и продолжаем поиск дальше, в соответствии с нашим регулярным выражением.
Говоря простым языком, расшифруем регулярное выражение выше: «Мы ищем 4
, за которым не следует 3 нуля, но следуют 3 другие цифры».
Позитивная опережающая проверка работает аналогично, но символы внутри неё должны совпадать с тем, что мы хотим найти. Синтаксис позитивной опережающей проверки следующий:
(?=x)
Всё, что нам нужно сделать, это заменить !
на =
.
Ретроспективная проверка
Ретроспективные проверки работают так же, как и опережающие проверки, но, вместо того, чтобы смотреть вперёд, а затем отбрасывать результат, мы смотрим назад, а затем отбрасываем результат. Подобно опережающим проверкам, ретроспективные проверки также могут быть как позитивными, так и негативными. Они используют аналогичный синтаксис, но с добавлением <
после ?
.
Синтаксис позитивной ретроспективной проверки:
(?<=x)
Синтаксис негативной ретроспективной проверки:
(?<!x)
Допустим, нам нужно найти экземпляры, соответствующие слову Smith
, но только если это фамилия. Чтобы сделать это, мы указываем, что хотим проверить слово перед найденным значением Smith
, и, если это слово начинается с заглавной буквы, мы будем считать это фамилией:
Регулярное выражение: (?<=[A-Z]\w* )Smith
Пример: Now we won't identify Smith Francis but we will identify Harold Smith.
Поначалу разобраться с опережающими и ретроспективными проверками может быть немного сложно, но это всего лишь дело практики.
Заключение
Резюмируем то, что мы узнали:
()
— группируем часть регулярного выражения;
\1
, \2
и т.д. — ссылаемся на соответствие, найденное группой ранее;
|
— оператор ИЛИ: ищем соответствие либо правому, либо левому операнду;
(?=x)
— позитивная опережающая проверка;
(?!x)
— негативная опережающая проверка;
(?<=x)
— позитивная ретроспективная проверка;
(?<!x)
— негативная ретроспективная проверка.
Оценить статью:
Загрузка…
Поделиться в социальных сетях:
Регулярные выражения для валидации распространенных видов данных / Хабр
Для проверки текстовых полей на валидность обычно используют регулярные выражения. Существует несколько наиболе распространенных видов таких даных, как например номер кредитки, дата в определенном формате и т. д. На сайте html5pattern.com собирается коллекция регулярных выражений для таких данных (там это позиционируется, как возможное содержимое html5-атрибута pattern у inpit-элементов, но эти регулярные выражения можно использовать и для привычной валидации с помощью javascript). Актуальные для российской аудитории примеры, вместе с соответствующими регулярными выражениями вы можете посмотреть под катом.
- Номер кредитки:
[0-9]{13,16} - ICQ:
([1-9])+(?:-?\d){4,} - Набор из букв и цифр (латиница):
^[a-zA-Z0-9]+$ - Набор из букв и цифр (латиница + кириллица):
^[а-яА-ЯёЁa-zA-Z0-9]+$ - Домен (например abcd.com):
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$ - IPv4: (подкорректировано runcore)
((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?) - IPv6:
((^|:)([0-9a-fA-F]{0,4})){1,8}$ - Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):
^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$ - Пароль (Строчные и прописные латинские буквы, цифры):
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$ - Пароль (Строчные и прописные латинские буквы, цифры, спецсимволы. Минимум 8 символов):
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$ - Дата в формате YYYY-MM-DD:
[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])
UPD. Более строгая проверка, предложенная runcore:
(19|20)\d\d-((0[1-9]|1[012])-(0[1-9]|[12]\d)|(0[13-9]|1[012])-30|(0[13578]|1[02])-31) - Дата в формате DD/MM/YYYY:
(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d - Целые числа и числа с плавающей точкой (разделитель точка):
\-?\d+(\.\d{0,})? - UUID:
^[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}$ - Широта или долгота:
-?\d{1,3}\.\d+
- UPD. E-mail (от kvf77):
^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$ - UPD. URL на латинице. Если нужно распознавать и кириллические домены, необходимо изменить все «a-z0-9» на «а-яёa-z0-9» и добавить в список доменных зон «рф» (от kvf77):
~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:ru|su|com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&?+=\~/-]*)?(?:#[^ ‘\»&]*)?$~i - UPD. Время в формате HH:MM:SS (от runcore):
^([0-1]\d|2[0-3])(:[0-5]\d){2}$ - UPD. Mac-адрес (от tiahin):
([0-9a-fA-F]{2}([:-]|$)){6}$|([0-9a-fA-F]{4}([.]|$)){3}
Неуказанные, но важные на ваш взгляд типы данных, можете выкладывать в комментариях (вместе с регулярными выражениями). Можете так же поделиться ими с html5pattern.com, заполнив форму на главной странице.
30 примеров полезных регулярных выражений
Процесс разработки веб-приложений значительно отличается от разработки программного обеспечения, однако основные моменты при программировании одинаковы в обоих случаях, поэтому выгода от использования регулярных выражений будет видна всем.
Изучение регулярных выражений (regex) довольно сложный процесс, особенно для начинающих, но при правильном подходе, вы освоите чрезвычайно мощный и полезный инструмент.
Самым сложным этапом при обучении с нуля является понимание синтаксиса регулярных выражений. Чтобы не тратить время на написание своих собственных регулярных выражений, автор статьи собрал 30 различных примеров, которые чаще всего используются при работе над различными проектами.
Как известно, регулярные выражения не «привязаны» к какому-то определенному языку программирования, поэтому вы можете использовать приведенные ниже примеры выражений при разработке проектов на различных языках. Например, на JavaScript, PHP или Python.
Проверка надежности пароля
^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$Надежность пароля — довольно субъективное понятие, поэтому не существует универсального решения для проверки. Однако, приведенный выше пример регулярного выражения может стать хорошей отправной точкой, если вы не желаете придумывать выражение для проверки пароля с нуля.
Код цвета в шестнадцатеричном формате
Шестнадцатеричные коды цветов используются при веб-разработке очень часто. Это регулярное выражение может быть поможет сравнить: совпадает ли какая-либо строка с шаблоном шестнадцатеричного кода.
Проверка адреса электронной почты
/[A-Z0-9._%+-]+@[A-Z0-9-]+.+.[A-Z]{2,4}/igmОдной из самых распространенных задач при разработке является проверка соответствия введенной пользователем строки формату адреса электронной почты. Существует множество различных вариантов выражений для решения этой задачи, автор этой статьи предлагает свой оригинальный вариант.
IP-адрес (v4)
/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/Как e-mail может использоваться для идентификации посетителя, так IP-адрес является идентификатором конкретного компьютера в сети. Приведенное регулярное выражение проверяет соответствие строки формату IP-адреса v4.
IP-адрес (v6)
(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))Вы также можете проверить строку на соответствие формату IP-адреса новой, шестой версии более продвинутым регулярным выражением.
Разделитель в больших числах
/\d{1,3}(?=(\d{3})+(?!\d))/gТрадиционными разделителями в больших числах являются запятые, точки или другие знаки, повторяющиеся в числе через каждые 3 символа. Приведенный код регулярного выражения работает с любым числом и любым определенными вами символами для разделения трехзначных частей в больших числах: тысячах, миллионах и т.п.
Добавление протокола перед гиперссылкой
if (!s.match(/^[a-zA-Z]+:\/\//)) { s = 'http://' + s; }Независимо от того, с каким языком вы работаете: JavaScript, Ruby или PHP, это регулярное выражение может оказаться очень полезным. С его помощью проверяется любой URL-адрес на наличие в строке протокола, и если протокол отсутствует, указанный код добавляет его в начало строки.
«Вытягиваем» домен из URL-адреса.
/https?:\/\/(?:[-\w]+\.)?([-\w]+)\.\w+(?:\.\w+)?\/?.*/iКак известно, любой URL-адрес состоит из нескольких частей: вначале указывается протокол (HTTP или HTTPS), иногда за ним идет субдомен, а в завершении добавляется путь к странице. Вы можете использовать это выражение, чтобы вернуть только доменное имя, исключив все остальные части адреса.
Сортировка ключевых фраз по количеству слов
^[^\s]*$ //соответствует одному ключевому слову ^[^\s]*\s[^\s]*$ //соответствует фразе из 2 ключевых слов ^[^\s]*\s[^\s]* //соответствует фразе, содержащей по крайней мере 2 кючевых слова ^([^\s]*\s){2}[^\s]*$ //соответствует фразе из 3 ключевых слов ^([^\s]*\s){4}[^\s]*$ //соответствует фразе из 5 и более ключевых словЭто действительно полезные выражения для пользователей Google Analytics и инструмента для веб-мастеров. Ведь с помощью них можно отсортировать ключевые фразы, используемые посетителями при поиске по количеству слов, входящих в них.
Выражения могут проверять фразы, содержащие определенное количество слов (например, 5), а также фразы количество слов в которых более двух, трех и т.д. Одно из самых мощных выражений, используемое для сортировки данных аналитики.
Поиск валидной строки Base64 в PHP
\?php[ \t]eval\(base64_decode\(\'(([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?){1}\'\)\)\;Если вы являетесь PHP-разработчиком, то иногда вам может понадобиться найти объект, закодированный в формате Base64. Указанное выше выражение может использоваться для поиска закодированных строк в любом PHP-коде.
Проверка телефонного номера
^\+?\d{1,3}?[- .]?\(?(?:\d{2,3})\)?[- .]?\d\d\d[- .]?\d\d\d\d$Это регулярное выражение применяется для проверки любого номера телефона, прежде всего, американского формата телефонных номеров.
Проверка телефонных номеров может стать довольно сложной задачей, поэтому автор статьи рекомендует детально ознакомиться с различными вариантами решения на сайте stackoverflow.com
Комментарий mattweb.ru
Для проверки российских телефонных номеров используйте следующее выражение:
^((\+?7|8)[ \-] ?)?((\(\d{3}\))|(\d{3}))?([ \-])?(\d{3}[\- ]?\d{2}[\- ]?\d{2})$Начальные и конечные пробелы
Используйте это регулярное выражение для того, чтобы избавиться от начальных и конечных пробелом в строке. Это не особо распространенная задача, но иногда это выражение может быть полезным. Например, при получении данных из БД или передачи строки скрипту в другой кодировке.
«Вытягиваем» HTML-код изображения
\]*[src] *= *[\"\']{0,1}([^\"\'\ >]*)Если по какой-либо причине вам необходимо «вытянуть» HTML-код изображения прямо из кода страницы, это регулярное выражение станет для вас идеальным решением. Хотя оно может без проблем работать на стороне сервера, для фронтенд-разработчиков приоритетней будет использовать метод attr() библиотеки jQuery вместо указанного регулярного выражения.
Проверяем дату на соответствие формату DD/MM/YYYY
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$Проверять даты сложно, потому что они могут быть представлены в различных форматах, в том числе содержащих и числа, и текст.
В PHP имеется отличная функция date(), но она не всегда подходит, ведь в нее может быть передана необработанная строка. Поэтому для проверки указанного формата даты нужно использовать приведенное выше регулярное выражение.
Совпадение строки с адресом видеоролика на YouTube
/http:\/\/(?:youtu\.be\/|(?:[a-z]{2,3}\.)?youtube\.com\/watch(?:\?|#\!)v=)([\w-]{11}).*/giНа протяжении нескольких лет на Youtube не меняется структура URL-адресов. Youtube является самым популярным видео хостингом в Интернет, благодаря этому, видео с Youtube набирают наибольший трафик.
Если вам необходимо получить ID какого-либо видеоролика с Youtube, воспользуйтесь приведенным выше регулярным выражением. Это наилучшее выражение, подходящее для всех вариантов URL-адресов на этом видео-хостинге.
Проверка ISBN
/\b(?:ISBN(?:: ?| ))?((?:97[89])?\d{9}[\dx])\b/iИнформация обо всех печатные изданиях, хранится в системе, известной как ISBN, которая состоит из 2 систем: ISBN-10 и ISBN-13. Неспециалисту очень сложно увидеть различия между этими системами. Однако, представленное выше регулярное выражение позволяет проверять соответствие кода ISBN сразу обоим системам: будь то ISBN-10 или ISBN-13. Код написан на PHP, поэтому это решение подходит исключительно для веб-разработчиков.
Проверка почтового индекса (Zip Code)
Автор этого регулярного выражения не только придумал его, но и еще нашел время его описать. Это выражение будет полезно вам, если вы проверяете совпадение строки со стандартным пятизначным индексом или его удлиненным вариантом, содержащим 9 знаков. Обращаем ваше внимание, что это выражение подходит только для проверки американских почтовых индексов. Для индексов других стран необходима настройка.
Комментарий mattweb.ruДля проверки российских почтовых индексов используйте следующее выражение:
Проверка правильности имени пользователя Twitter
Это небольшое регулярное выражение помогает найти имя пользователя Twitter внутри текста. Оно проверяет наличие имени в твитах по шаблону: @username.
Проверка номера кредитной карты
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$Проверка номера кредитной карты очень часто проводится при осуществлении платежей в различных платежных онлайн -системах. Однако, регулярное выражение обеспечивает минимальную проверку стандартной кредитной карты.
Вы можете ознакомиться с более полным списком кодов для детальной проверки карт. Список включает в себя такие системы как Visa, MasterCard, Discover и многие другие.
Поиск CSS-атрибутов
^\s*[a-zA-Z\-]+\s*[:]{1}\s[a-zA-Z0-9\s.#]+[;]{1}Ситуация, когда придется воспользоваться указанным регулярным выражением, может сложиться очень редко, но не факт что не сложится никогда
Этот код можно использовать когда будет необходимо «вытянуть» какое-либо CSS-правило из списка правил для какого-нибудь селектора.
Удаление комментариев в HTML
Если вам необходимо удалить все комментарии из блока HTML-кода, воспользуйтесь этим регулярным выражением. Чтобы получить желаемый результат, вы можете воспользоваться PHP-функцией preg_replace().
Проверка на соответствие ссылке на Facebook-аккаунт
/(?:http:\/\/)?(?:www\.)?facebook\.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-]*)/Если вам необходимо узнать у посетителя вашего сайта адрес его странички в Facebook, попробуйте это регулярное выражение. Оно поможет вам проверить правильность указанного пользователем URL. Этот код отлично подходит для проверки ссылок в этой соцсети.
Проверка версии Internet Explorer
^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/[5-9]\.0).*$Несмотря на то, что Microsoft выпустил новый браузер Edge, многие пользователи до сих пор пользуются Internet Explorer. Веб-разработчикам часто приходится проверять версию этого браузера, чтобы учитывать особенности разных версий при работе над своими проектами.
Вы можете использовать это регулярное выражения в JavaScript-коде чтобы узнать какая версия IE (5-11) используется.
«Вытягиваем» цену из строки
/(\$[0-9,]+(\.[0-9]{2})?)/Цена какого-либо товара может быть указана в различных форматах: в ней могут встречаться запятые, знаки после запятой и символы валюты.
Указанное выше регулярное выражение учитывает различные форматы отображения цены, с его помощью вы сможете «вытянуть» цену из любой символьной строки.
Разбираем заголовки в e-mail
/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/iС помощью этого небольшого выражения вы сможете разобрать заголовок e-mail сообщения, чтобы извлечь оттуда список адресатов. Выражение может быть использовано и в случае, если адресатов несколько.
Вместо регулярных выражений, для разбора заголовков e-mail вы можете воспользуйтесь библиотекой на PHP.
Соответствие имени файла определенному типу
/^(.*\.(?!(htm|html|class|js)$))?[^.]*$/iЕсли в вашем приложении существует возможность загрузки файлов на сервер, это регулярное выражение может помочь вам проверить файлы перед тем как посетитель их загрузит.
С помощью этого кода можно получить расширение загружаемого файла и проверить присутствует ли оно в списке разрешенных к загрузке.
Соответствие строки формату URL
/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/giРегулярное выражение может проверять URL-адреса с указанием протоколов HTTP и HTTPS на предмет соответствия синтаксису доменов TLD.
Существует простой способ проверки с использованием JavaScript RegExp.
Добавление атрибута rel=”nofollow” в теге ссылки
(<a\s*(?!.*\brel=)[^>]*)(href="/https?://)((?!(?:(?:www\.)?'.implode('|(?:www\.)?', $follow_list).'))[^"]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>Если вы много работаете с HTML-кодом, то вам захочется автоматизировать часто повторяющиеся действия. Регулярные выражения отлично подходят для решения этой задачи и сэкономят много вашего времени.
Используя приведенный код, например, совместно с PHP, вы сможете «вытянуть» код ссылок из блоков HTML-кода и добавить в каждую из них атрибут rel=”nofollow”.
Работа с media query
/@media([^{]+)\{([\s\S]+?})\s*}/gВы можете разбивать строки содержащие медиа-запросы на части, состоящие из параметров и свойств. Указанное выражение может быть полезно для анализа стороннего CSS-кода. Используя его вы сможете, например, более подробно понять как устроен чужой код.
Синтаксис поисковых выражений Google
/([+-]?(?:'.+?'|".+?"|[^+\- ]{1}[^ ]*))/gВы можете составить свои собственные регулярные выражения для манипулирования результатами поиска по вашим запросам в поисковой системе Google. Например, знак плюс (+) добавляет дополнительные ключевые слова, а минус (-) означает, что слова должны быть проигнорированы и удалены из результатов.
Это довольно сложное выражение, но если разобраться как использовать его должным образом, приведенный код может стать основой для построения собственного алгоритма поиска.
Заключение
Путь к пониманию регулярных выражений довольно труден, однако, если вы будете его придерживаться, результат вас не разочарует. Попробуйте использовать приведенные в статье регулярные выражения при создании своего веб-приложения. Таким образом вы сможете понять как работают выражения из примеров, приведенных в статье, в реальности.
Если у вас есть свои примеры полезных регулярных выражений, вы можете добавить их в качестве комментария к этой статье.
Почитать оригинал статьи
Как проверить с помощью регулярного выражения математический пример на корректность?
По-моему, в regex скобки учитывать очень сложно. Я бы вместо regex просто распарсил бы всё выражение. Или сначала выделил бы все выражения в скобках, а затем скормил бы всё это регулярному выражению.
Вот вам программка на питоне, которая выделяет все скобки и проверяет выражения в них. Написана на скорую руку, но работает. Загвоздка в том, что ваше регулярное выражение работает не совсем корректно, но вы уж сами поправьте. Мне уже лень.
Запускать можно в браузере: repl.it/3xv/1
Вам нужно лишь отредактировать выражение на 14 строке.
equations = """\ 17*4+(x*54/(2+4))=y 2+2 18*41*с +45 17+4* (34+1,45*3) (4+5)) x+z+(9/(5*(5669*(5+9))) """ import re REGEX = re.compile(r"(([a-z]|\d+)[\+\-\/\*]){1,}([a-z]|\d+)(=([a-z]|\d+))?") def matches(line, opendelim='(', closedelim=')'): stack = [] for m in re.finditer(r'[{}{}]'.format(opendelim, closedelim), line): pos = m.start() if line[pos-1] == '\\': # skip escape sequence continue c = line[pos] if c == opendelim: stack.append(pos+1) elif c == closedelim: if len(stack) > 0: prevpos = stack.pop() yield (True, prevpos, pos, len(stack)) else: # error yield (False, 0, 0, 0) pass if len(stack) > 0: for pos in stack: yield (False, 0, 0, 0) def isPartCorrect(s): result = False if REGEX.match(s): result = True print(" check " + s + " -> " + str(result)) return result def isCorrect(s): result = True if s.find("(") >=0 or s.find(")") >= 0: for correct, openpos, closepos, level in matches(s): if correct: part = s[openpos:closepos] if part.find("(") == -1 and part.find(")") == -1: if not isPartCorrect(part): result = False break part = s[openpos-1:closepos+1] replaced = s.replace(part, "p") if replaced.find("(") >=0 or replaced.find(")") >= 0: if not isCorrect(replaced): result = False break else: if not isPartCorrect(replaced): result = False break else: result = False break else: result = isPartCorrect(s) return result for line in equations.splitlines(): print(line) if isCorrect(line): print(" correct\n") else: print(" wrong\n")
Тест простоты числа регулярным выражением / Хабр
Я видел множество проблем, связанных с регулярными выражениями, но в прошлую пятницу, спасибо Крису и Шону я нашел одну регулярку, которая позволяет проверить, является ли данное целое число простым. Оригинальные статьи предлагали следующее регулярное выражение для определения простоты числа:
/^1?$|^(11+?)\1+$/
Применять его следует не к самому целому числу. Вместо этого, нужно создать строку из единиц, где количество единиц соответствует самому числу и уже к этой строке применить регулярное выражение. Если совпадения нет — число простое. Это регулярное выражение содержит обратные ссылки и поэтому не будет работать на DFA-движке, таком, как функции PHP ereg*. Но оно прекрасно работает с функциями preg_*, или по меньшей мере я так думал (подробнее об этом ниже).
Так как же оно работает? Выглядит как настоящая головоломка, но на самом деле все просто. Проигнорируйте его часть до символа |, поскольку она предназначена просто для выяснения, является ли строка совсем пустой или состоит из одной единицы.
Подвыражение (11+?) совпадает со строками вроде 11, 111, и т.д… Часть «\1+» будет искать далее по строке совпадения с результатами поиска первого подвыражения. В первый раз совпадение произойдет по строке «11» и потом поиск строки «11» будет произведен снова, а затем снова до конца строки. Если поиск завершится успешно, число не является простым. Почему? Потому, что будет доказано, что длина строки делится на 2 и, соответственно, само число тоже делится на два. Если совпадения не произойдет, движок регулярных выражений начнет искать строку «111» и ее повторения (таким образом реализуя дальше решето Эратосфена — прим. пер). Если первое подвыражение становится достаточно длинным (n/2) и совпадений по-прежнему не будет обнаружено, число будет являться простым.
Недавно Шон написал плагин для выполнения кода для бота IRC, основанной на Phergie, который висит на том же, канале, в котором мы общаемся. Сам плагин суть просто прокси к ideone.com, но он полезен для быстрых тестов кода. Мы экспериментировали с этим шаблоном регулярного выражения и написали PHP функцию, которая возвращает простое число, следующее за переданным целым. Неприятности начались, когда Шон передал этой функции 99999999 и она возвратила 100000001. Похоже, произошла ошибка, поскольку 100000001 не является простым числом (=17 * 5882353). Wolfram Alpha это подтвердил.
После нескольких похожих тестов мы нашли еще числа, которые не являлись простыми, но проходили наш маленький тест. Мы задумались, где же может быть проблема? PHP код был слишком простым, чтобы иметь баг, достаточно много ответов, полученных от нашей функции, являлись верными. Похоже, пришло время воспользоваться методом грубой силы. Я быстро написал код для тестирования последовательности нечетных чисел нашему шаблону и стал проверять ответы нашей функции решетом Эратосфена, чтобы понять, где результаты становятся ошибочными. Первым ошибочно найденным числом стало 22201. Проверка нашей регуляркой сказала нам, что он должно быть простым, но вообще-то оно является квадратом 149. После этой границы количество ошибочно определенных простых возросло.
Вдруг меня осенило, что проблема может скрываться в самом механизме обратных ссылок в регулярных выражениях. В частности, в том, как именно он реализован в PCRE, сердце регулярных выражений в PHP. Как я уже упоминал в посте на Regex Clinic, неограниченное использование обратных ссылок ведет к сильному снижению скорости обработки текста регулярным выражением и поэтому следует хорошенько подумать, прежде чем использовать его для написания сложных регулярных выражений. Для того, чтобы устранить опасность злоупотребления этим механизмом, в PCRE несколько лет назад был реализован ограничительный параметр pcre.backtrack_limit. В нашем случае обратные ссылки использовались для разбивания текста из единиц на большое количество частей и с очень большими строками это могло привести к выходу за установленный лимит, который по умолчанию — 100000. Я подумал, что со строкой из 22201 символа этого лимита было недостаточно. Как только лимит достигался, совпадение отказывало и число объявлялось простым.
Я увеличил лимит до 200000 и, вуаля!.. 22201 уже не определялось, как простое. Для того, чтобы исправить работу регулярного выражения с совпадением №100000001, лимит пришлось серьезно поднять аж до 250000000! Прогон регулярного выражения при этом стал занимать около 14 секунд на моем новом i5 MacBook Pro.
Не стоит и говорить, что описанный мной подход к проверке числа на простоту не должен использоваться в реальной жизни. Просто оцените его элегантность. Я оценил. И я рад, что мое небольшое исследование показало, что абстрактные, чистые, хорошие идеи могут просто не работать в нашем сумасшедшем мире софта и железа.
Разминаем мозг регулярными выражениями — Regex Tuesday Challenge / Хабр
Я хочу предложить вам поломать голову вечерок-другой над интересными задачками, на регулярные выражения, которые Callum Macrae выкладывает на своем сайте на GitHub каждый Вторник.
Каждый вопрос представлен в виде набора тестов. Задача — написать такой регулярное выражение, чтобы все тесты стали зелеными.
Некоторые из задач сами по себе довольно простые, а самая интересная часть — в том, чтобы написать наиболее короткое возможное регулярное выражение.Тесты используют JavaScript Regex движок вашего браузера, который обладает всеми основными возможностями PCRE. Подробнее можно посмотреть тут (англ.) , в колонке ECMA в таблице.
Я собрал в этой статье русские версии задач и материалов, которые могут помочь в их решении. Было бы интересно увидеть самые интересные решения в комментах.
UPD: В регулярных выражениях ECMAScript нету ретроспективных проверок.
1. Выделяем повторяющиеся слова (Ссылка ведет на задачу)
Задача:
Выделить тегом <strong> повторяющиеся слова.
Примеры:
Тhis is a test
=>this is a test
Тhis is is a test
=>this is <strong>is</strong> a test
2. Оттенки серого
Задача:
Выбрать отенки серого в разных цветовых системах.
Почитать про цвета можно по этой ссылке.Примеры:
#FFF
— Да
rgb(2.5, 2.5,2.5)
— Да
rgb(2, 4, 7)
— Нет3. Даты найти строки сответствующем этому шаблону: YYYY/MM/DD HH:MM(:SS)
Задача:
Выбрать существующие даты между 1000 и 2012 годом. Секунды могут быть опущены.
Автор облегчает задачу: в каждом месяце 30 дней.Примеры:
2012/09/18 12:10
— Да
2013/09/09 09:09
— Нет (после 2012)4. Курсив в MarkDown
Задача:
Преобразовать текст, обрамленный в звездочки, в курсив. Не трогать текст в двойных звездочках (жирный).
Почитать подробнее про MarkDown можно в википедии.Примеры:
*this is italic*"
=><em>this is italic</em>
**bold text (not italic)**
=>**bold text (not italic)**
5. Числа
Задача:
Выбрать числа с запятой или пробелом, в качестве разделителя разрядов. (к счастью обошлось без моммайе)
Примеры:
8,205,500.4672
— Да
1,5826,000
— Нет6. IPv4 адреса
Задача:
Выбрать IPv4 адреса во всех возможных, представлениях: десятичном, шестнадцатеричном и восьмеричном. С точками и без. Подробнее про IP адреса можно узнать в википедии
Примеры:
99.198.122.146
— Да
0xFF.255.0377.0x12
— Да
256.256.256.256
— Нет7. Доменные имена
Задача:
Доменные имена для протоколов http и https, с необязательным слешем в конце. Специальые символы не используются.
Примеры:
http://example.com/
— Да
example.com
— Нет
кремль.рф
— Нет 🙁8. Повторяющиеся пункты в списке MarkDown
Задача:
Найти и выделить жирным (**) повтряющиеся пункты в MarkDown-списке.
Примеры:
* First list item
* Second list item
=>* First list item
* Second list item
* Repeated list item
* Repeated list item
=>* Repeated list item
* **Repeated list item**
9. Ссылки в MarkDown
Задача:
Преобразовать MarkDown ссылки в HTML. Выглядят вот так:
[text](http://example.com)
Главное не перепутать с картинками:![alt text](image location)
Примеры:
[Basic link](http://example.com)
=><a href="http://example.com">Basic link
[Invalid](javascript:alert())
=>[Invalid](javascript:alert())
10. Делим предложение на токены.
Задача:
Разбить предложение на токены. Это может быть полезно, например, для поисковой системы.
Есть несколько правил:
- Несколько слов в кавычках должны попасть в один токен
This "huge test" is pointless
=>this,huge test,is,pointless
- Слова написанные через дефис так же попадают в один токен.
Слова написанные через несколько дефисов (тире), или имеющие дефис в начале или в конце попадают в раздельные токены.Suzie Smith-Hopper test--hyphens
=>Suzie,Smith-Hopper,test,hyphens.
- Сокращения (стяжения) попадают в один токен
I can't do it
=>I,can't,do,it.
- Вся пунктуация кроме апострофов и дефисов должна быть убрана.
Too long; didn't read
=>Too,long,didn't,read.
11. Буквы в алфавитном порядке.
Задача:
Выбрать последовательность неповторяющихся символов в алфавитнои порядке.Пробелы нужно игнорировать. К сожалению известные мне решения не очень удачны.
Примеры:
abcdefghijk
— Да
abbc
— Нет
12. Исправляем пробелы
Задача:
Убрать повторяющиеся пробелы и знаки табуляции, оставить по одному пробелу между словами и по два между предложениями.
Примеры:
Extra spaces
=>Extra spaces
Sentence. Sentence.
=>Sentence. Sentence.
13. Повторяющиеся слова друг под другом
Задача:
Выбрать повторяющиеся слова, которые находятся непосредственно друг под другом.
Предполагается использование моноширинного шрифта. Строки длиннее 32х символов переносятся.
Примеры:
This sentence is pretty long and
this sentence is also a test
— Да
This sentence also shouldn't
match as this has no words
below.
— Нет
14. Брутфорсим химические элементы
Задача:
>Выбираем первые 50 химических элементов таблицы менделеева. Решение довольно очевидное, поэтому задача — найти максимально короткое решение.
Примеры:
H
— Да
M
— Нет
15. Музыкальные аккорды
Задача:
Выбрать музыкальные аккорлы, например как Cmin, или Bmaj. Нужны и краткая и полная записи. Для данной задачи предпложим, что аккорды E♯, B♯, F♭ and C♭ не существует.
Для интересующихся есть неплохая статья об аккордах на русском и английская статья на википедии, где используются соответствующие символы
Так же обратите внимание, что диез (♯)
это не то же самое, что решетка (#).
Примеры:
C
— Да
Z
— Нет
16. Брутфорсим химические элементы
Задача:
Выбрать химические элементы с атомным числом больше 50.
Примеры:
I
— Да
A
— Нет
17. Регулярное выражение для регулярного выражения.
Задача:
Выбрать правильно построенное регулярное выражение.Для начала ограничимся литералами (возможно экранированными), классами и несколькими квантификаторами.
Примеры:
/regexp?/
— Да
regex
— Нет
18. IRC — Сообщения
Задача:
Выбрать правильно сформированное IRC сообщение.
Вот ссылка на русскую версию спецификаци.
Примеры:
[_]!abc@test PRIVMSG #chat :Test
— Да
[email protected] PRIVMSG #chat :Hello!
— Нет
Регулярное выражение проверки на число
От автора: приветствую вас, друзья. В этой статье мы уже непосредственно начнем изучать возможности регулярных выражений, познакомимся с функцией preg_match() в PHP, а также составим первое регулярное выражение проверки на число.
Начать статью, пожалуй, стоит с того, что регулярные выражения — это очень мощное средство для работы с текстом. Как вы уже знаете, с помощью регулярных выражений мы можем отыскать в массиве текста буквально что угодно. Однако злоупотреблять такой мощью не стоит. Не забывайте о том, что PHP предлагает нам массу функций для работы со строками, типами и так далее, которые позволяют проверить, скажем, наличие определенного символа или подстроки в строке.
Поэтому, если есть возможность решить задачу без привлечения регулярных выражений, тогда стоит использовать эту возможность, поскольку функции для работы с регулярными выражениями, как правило, более ресурсоемки. В данном случае задачу можно решить и без регулярных выражений. Например, проверить являются ли все символы в строке числовыми можно с помощью функции ctype_digit().
Но по условиям поставленной в статье задачи нам необходимо использовать регулярные выражения, поэтому решим поставленную задачу, используя функцию preg_match(). Данная функция проверяет строку на соответствие шаблону регулярного выражения. Функция имеет 5 параметров, из которых на практике практически всегда используются только первые 2.
Первый параметр функции будет шаблоном регулярного выражения. Второй — проверяемая строка. Иногда может понадобится третий параметр, указав который мы получим массив с результатами поиска.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!
Давайте же составим свой первый шаблон. Выглядеть он может следующим образом:
На первый взгляд может выглядеть непонятно и несколько пугающе. Однако ничего страшного здесь нет, сейчас мы его разберем. Начнем с того, что регулярные выражения активно используют специальные символы, т.н. метасимволы. В нашем шаблоне их достаточно много:
^ — метасимвол начала строки
$ — метасимвол конца строки
[] — метасимволы символьного класса
+ — квантификатор, обозначающий 1 или более вхождений символа или группы символов, после которых использован квантификатор.
Итого, что же мы получили? Как можно прочесть составленный шаблон регулярного выражения? А читается он так:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!
строка будет валидироваться целиком, от начала до конца (метасимволы ^$)
в строке могут быть только цифры от 0 до 9 ([0-9])
в строке должна быть как минимум одна цифра (+)
Теперь давайте проверим шаблон в действии.
Как видим, регулярное выражение работает корректно. Под него подошли только строки, полностью состоящие из цифр. Кстати, если вы тестируете также на сайте regexr.com и в тексте более одной строки, тогда для шаблона необходимо указать специальный флаг — m, что позволит шаблону работать с многострочным текстом. Сделать это можно в правом верхнем углу, пункт меню flags.
Обратите внимание, что произойдет, если мы уберем метасимволы начала и/или конца строки:
Теперь мы вадидируем не всю строку целиком, а просто ищем что-то в строке. В итоге в третьей строке были найдены цифры, хотя по условию задачи эта строка нам не подходит. Теперь давайте используем функцию preg_match и проверим каждую из строк по отдельности:
$arr = [‘123’, ‘test’, ’45ew45′, ‘456’];
$pattern = ‘#^[0-9]+$#’;
foreach($arr as $item){
if( preg_match($pattern, $item) ){
echo «<p>Строка <b>$item</b> содержит только цифры</p>»;
}else{
echo «<p>Строка <b>$item</b> не подходит</p>»;
}
}
$arr = [‘123’, ‘test’, ’45ew45′, ‘456’]; $pattern = ‘#^[0-9]+$#’;
foreach($arr as $item){ if( preg_match($pattern, $item) ){ echo «<p>Строка <b>$item</b> содержит только цифры</p>»; }else{ echo «<p>Строка <b>$item</b> не подходит</p>»; } } |
В результате мы увидим то, что и предполагали:
Как видим, все работает отлично! На этом мы будем завершать данную статью. Напоминаю, что больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!
Хотите изучить регулярные выражения на PHP?
Посмотрите 12-ти часовой видео курс по регулярным выражениям на PHP!
Смотреть
Классы символов | |
---|---|
. | любой символ, кроме новой строки |
\ ш \ д \ с | слово, цифра, пробел |
\ W \ D \ S | не слово, цифра, пробел |
[abc] | любой из a, b или c |
[^ abc] | не a, b или c |
[а-г] | символ между a и g |
Анкеры | |
^ abc $ | начало / конец строки |
\ б | граница слова |
Экранированные символы | |
\.\ * \\ | экранированных специальных символов |
\ t \ n \ r | табуляция, перевод строки, возврат каретки |
\ u00A9 | Unicode сброшен © |
Группы и поиск | |
(abc) | группа захвата |
\ 1 | обратная ссылка на группу № 1 |
(?: Abc) | группа без захвата |
(? = Abc) | положительный прогноз |
(?! Abc) | негативный прогноз |
Квантификаторы и чередование | |
а * а + а? | 0 или более, 1 или более, 0 или 1 |
а {5} а {2,} | ровно пять, два или больше |
а {1,3} | между одним и тремя |
а +? а {2,}? | совпадений как можно меньше |
ab | cd | соответствует ab или cd |
.
Классы символов | |
---|---|
. | любой символ, кроме новой строки |
\ ш \ д \ с | слово, цифра, пробел |
\ W \ D \ S | не слово, цифра, пробел |
[abc] | любой из a, b или c |
[^ abc] | не a, b или c |
[а-г] | символ между a и g |
Анкеры | |
^ abc $ | начало / конец строки |
\ б | граница слова |
Экранированные символы | |
\.\ * \\ | экранированных специальных символов |
\ t \ n \ r | табуляция, перевод строки, возврат каретки |
\ u00A9 | Unicode сброшен © |
Группы и поиск | |
(abc) | группа захвата |
\ 1 | обратная ссылка на группу № 1 |
(?: Abc) | группа без захвата |
(? = Abc) | положительный прогноз |
(?! Abc) | негативный прогноз |
Квантификаторы и чередование | |
а * а + а? | 0 или более, 1 или более, 0 или 1 |
а {5} а {2,} | ровно пять, два или больше |
а {1,3} | между одним и тремя |
а +? а {2,}? | совпадений как можно меньше |
ab | cd | соответствует ab или cd |
.
regex — соответствие регулярного выражения для проверки на действительный год
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
javascript — Regex для проверки, содержит ли строка только числа
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.