Применение регулярных выражений в PHP, JavaScript, Python, Java
В русском языке есть такие выражения, которые смело можно назвать регулярными. Но речь идет не о них, а о выражениях, применяемых в программировании. Хотя некоторые из регулярных выражений русского языка в программировании тоже применяются, особенно если что-то не получается.
Регулярные выражения – что можно ими выразить
Их значение для всемирной паутины трудно выразить в двух словах. Можно начать с того, что основной принцип деятельности поисковых систем полностью построен на регулярных выражениях. Именно с помощью паттернов на их основе происходит сортировка результатов поиска в ответ на пользовательский запрос:

Под регулярными выражениями в программировании подразумевают систему специальных метасимволов, с помощью которых создается шаблон (паттерн) для сортировки текстовых данных. Или их проверки на соответствие заданному шаблону.
Метасимволы, применяемые в создании строковых шаблонов, также называются «символы-джокеры». Они используются для замены символов или их чередования.
Регулярные выражения поддерживаются большинством современных программных языков (php и другими).
Использование паттернов на основе регулярных выражений сильно упростило систематизацию и сортировку данных во многих отраслях человеческой деятельности. В том числе и в сфере веб-технологий.
Конкретным примером применениями таких шаблонов на сайте является проверка правильности заполнения полей регистрационной формы. Или сортировка информации о пользователях в SQL базе данных ресурс:

Любая неточность, допущенная в структуре шаблона, может привести к неправильной сортировке данных и глобальной ошибке в работе всего интернет-ресурса. Поэтому очень важна правильность написания этих шаблонов.
Использование регулярных выражений в php
В языке PHP применяются два вида регулярных выражений:
- POSIX-совместимые;
- Perl-совместимые, или PCRE – библиотека разрабатывалась специально для языка Perl.
Их синтаксис во многом схож, но создаваемые с помощью библиотеки PCRE выражения обладают более мощным функционалом и обрабатываются в несколько раз быстрее. Поэтому подробнее остановимся на них.
PCRE выражения представляет собой строку, состоящую из:
- Ограничителя;
- Шаблона (паттерна);
- Модификатора (не обязательный элемент).
Пример:
/d{3}-d{2}/m
- Символ '/' является разделителем;
- 'd{3}-d{2}' – это само выражение;
- m - модификатор.
Принцип любого регулярного выражения заключен в действии метасимволов. Основным из них является '' (обратный слэш). Он делает любой знак, стоящий после него метасимволом, или наоборот превращает специальный знак в обычный:
. - превращает метасимвол в обычную точку.
Обратный слэш образует целую группу метасимволов. Основные из них:
- n – символ перевода строки;
- r – символ возврата каретки;
- d – цифра от 0 до 9;
- D – любой символ, кроме цифры;
- s – пустой символ (пробел или символ табуляции);
- S – непустой символ (все символы, кроме определяемых метасимволом s);
- w –любой словесный символ (цифры, буквы и знак подчеркивания '_');
- W – все, кроме определенных метасимволом w.
Примеры:
/ddd/ - любое число из трех цифр.
/d and d/ - любая из строк, состоящих из цифр по бокам и слова «and» ('1 and 2', '9 and 5').
Еще несколько распространенных метасимволов:
- [ ] – читается как один символ, способный принимать одно из значений, перечисленных в скобках.
/[1,2,3]/-5 или 4 уже не соответствуют.
- – минус используется для задания промежутка символа внутри скобок.
- ^ - означает отрицание, если стоит вначале скобок. Вне скобок - означает начало строки.
/[^1,2,3]/ – все цифры, кроме указанных.
/^s/ - строка должна начинаться с буквы s (home не пройдет).
- . –точка означает любой символ, кроме метасимвола перевода строки.
/../ - a1 подходит, a не пройдет.
- | -вертикальная линия означает альтернативу («или»).
/синий |красный/ - только одно из двух значений.
Это не все из множества метасимволов. Но рассмотренного минимума вполне хватит для написания новых и проверки существующих регулярных выражений.
Регулярные выражения в JavaScript
В javascript также в основном используется библиотека PCRE. Поэтому синтаксис написания регулярных выражений идентичен с выше описанным.
В отличие от php, в котором для работы с выражениями применяются функции, в javascript ими манипулируют через специальный объект RegExp. Вдобавок у строк имеются свои методы для работы с паттернами.
Пример объявления объекта:
var reg = new RegExp("ab+c", "i"),или
var reg = /ab+c/i.
/ab+c/-паттерн.
i-флаг, задающий параметры поиска.
Более подробную информацию по свойствам и флагам объекта RegExp можно получить в соответствующем разделе документации по языку javascript.
Приведем практический пример на JS с участием регулярных выражений. В нем организована проверка правильности заполнения простой формы для регистрации. Для проверки введенного адреса электронной почты использован паттерн:
/[0-9a-z_]+@[0-9a-z_]+.[a-z]{2,5}/i
Паттерн проверки корректности заполнения поля для пароля:
/[0-9a-z]+/

Полный код примера:
<head>
<meta http-equiv="Content-Type" content="text/html; charset= UTF-8"/>
<title>Untitled Document</title>
<script type="text/javascript">
function prov_adress(obj) {
var adr=obj.mail.value;
var par=obj.pas.value;
var adr_pattern=/[0-9a-z_]+@[0-9a-z_]+.[a-z]{2,5}/i;
var par_pattern=/[0-9a-z]+/i;
var prov=adr_pattern.test(adr);
var prov1=par_pattern.test(par);
if (prov==true && prov1==true) {
alert("Вы зарегистрированы!");
} else {
alert("Введенные данные некорректны!");
}
}
</script>
</head>
<body>
<form name="forma12">
<label>E-mail:</label><br>
<input type="text" name="mail"><br>
<label>Password:</label><br>
<input type="password" name="pas"><br>
<input type="button" value="Зарегистрировать" onclick="prov_adress(forma12);">
</form>
</body>
Регулярные выражения в популярных СУБД
В SQL нет встроенной поддержки регулярных выражений. Но, начиная с версии 2005 года, в SQL Server Management Studio (среда для работы с БД) реализована их поддержка с помощью CLR. То есть для создания паттернов на основе регулярных выражений потребуется знание одного из языков программирования и наличие еще одной среды разработки (Visual Studio).
Тем не менее, в SQL имеется поддержка ряда символов-шаблонов, облегчающих поиск и сортировку данных. Применяются они вместе с секцией LIKE, после которой указывается шаблон для поиска.
Синтаксис используемых метасимволов почти идентичен библиотеке PCRE. Но есть и ряд отличий. Более подробно о них можно узнать в технической документации к SQL.
В приведенном примере использован шаблон '[1-9]'. Производится выборка всех данных таблицы, где значение столбца StateProvinceID находится в пределах от 1 до 9:

В СУБД MySQL кроме оператора LIKE есть специальный оператор RLIKE, предназначенный специально для работы с регулярными выражениями. В отличие от SQL в MySQL акцент сделан на поддержку POSIX-совместимых паттернов.
В примере использован шаблон '^WordPress'. Он осуществляет выборку всех данных таблицы, в которых столбец `link_name` начинается со слова WordPress, стоящего первым в словосочетании. Запрос:
SELECT * FROM `wp_links` WHERE `link_name` RLIKE '^WordPress'

В Oracle для работы с регулярными выражениями используются специальные функции. Они поддерживают PCRE метасимволы. Функция regexp_like() по своему действию аналогична оператору LIKE. В качестве параметра функция принимает паттерн. Ее синтаксис:
REGEXP_LIKE(выражение; 'regexp шаблон')
Пример:
select * from regtest where regexp_like(dt,'[0-9]{8}'), где паттерн '[0-9]{8}'настроен на извлечение даты рождения.
Регулярные выражения в Java и Python
В Java все функции и методы для работы с регулярными выражениями входят в состав пакета java.util.regex. Он состоит из двух классов:
- Класс Patern – применяется для задания регулярного выражения.
- Класс Matcher – в его состав входят функции для сопоставления заданного шаблона файла данным.
Для использования регулярных выражений в Python есть модуль re. Он входит в состав стандартной библиотеки, начиная с версии 1.5. До этого в Python использовался модуль regex.
В состав модуля re входят функции для работы с выражениями и паттернами:
- re.match(pattern, string);
- re.search(pattern, string);
- re.compile(pattern).
Неужели все так плохо?
Не думайте, что программисты такие умные, и они эти регулярные выражения щелкают как семечки. Даже профессиональные «айтишники», когда дело доходит до составления паттерна, хватаются за голову.
Поэтому они и придумали специальные конструкторы регулярных выражений. Они представляют собой специальные онлайн-сервисы, где можно быстро сконструировать шаблон и проверить правильность его действия:
- regexpres.narod.ru – один из немногих конструкторов, имеющих русскоязычный интерфейс. В него входит специальный калькулятор регулярных выражений, на клавишах которого вместо цифр и знаков нанесены метасимволы. Кроме этого паттерн автоматически подставляется в нужный метод, и все это генерируется в код рабочей функции:

- regexr.com – имеет англоязычный, но понятный интерфейс. Благодаря расположенному внизу текстовому блоку можно легко произвести онлайн проверку регулярных выражений:

Так вот они какие!
Вот такие они страшные эти регулярные выражения. Работа с ними требует много внимания, смекалки и применения регулярных выражений из русского языка. Но они играют важную роль в работе любого ресурса всемирной паутины.