Применение регулярных выражений в 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.

Примеры:

/\d\d\d/ - любое число из трех цифр.
/\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:

StateProvinceID

В СУБД 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 – имеет англоязычный, но понятный интерфейс. Благодаря расположенному внизу текстовому блоку можно легко произвести онлайн проверку регулярных выражений:
произвести онлайн проверку

Так вот они какие!

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

03 ноября 2014 в 14:57
Вам понравился сайт или конкретно эта страница? Поделитесь ею со своими друзьями, нажав на одну из кнопок соцсетей слева или снизу. Желаете быть в курсе последних обновлений сайта — подпишитесь удобным для вас образом:
или поддержите нас, нажав на кнопку "Мне нравится"!
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png?1", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок