Опубликован: 28.04.2014 | Доступ: свободный | Студентов: 154 / 0 | Длительность: 03:30:00
Лекция 4:

Регулярные выражения

< Лекция 3 || Лекция 4: 12 || Лекция 5 >

Что такое регулярные выражения

Презентация к лекции

Регулярные выражения (regular expressions, RegExp) - наборы символов, применяемых для поиска текстовых строк, соответствующих требуемым условиям. Результат применения регулярного выражения - подмножество данных, отобранное согласно логике, заложенной в выражении. Регулярные выражения применяются в любых задачах по поиску в множестве данных, для которых нужно получать выжимку по определенным правилам.

Зачем нужны регулярные выражения?

Сравнение с шаблоном: Регулярные выражения отлично помогают определять, соответствует ли строка тому или иному формату - например, телефонному номеру, адресу электронной почты или номеру кредитной карты.

Замена: При помощи регулярных выражений легко находить и заменять шаблоны в строке. Так, выражение text.replace(/\s+/g, " ") заменяет все пробелы в text, например, " \n\t ", одним пробелом.

Извлечение: При помощи регулярных выражений легко извлекать из шаблона фрагменты информации. Например, name.matches(/^(Mr|Ms|Mrs|Dr)\.?\s/i) извлекает из строки обращение к человеку, например, "Mr" из "Mr. Schropp".

  • Портируемость: Почти в любом распространенном языке программирования есть своя библиотека регулярных выражений. Синтаксис в основном стандартизирован, поэтому вам не придется переучиваться регулярным выражениям при переходе на новый язык.
  • Код: Когда пишете код, можно пользоваться регулярными выражениями для поиска информации в файлах; так, в Atom для этого предусмотрен find and replace, а в командной строке - ack.
  • Четкость и лаконичность: Если вы с регулярными выражениями на "ты", то сможете выполнять весьма нетривиальные операции, написав минимальный объем кода.

Синтаксис регулярных выражений

Большинство символов в регулярных выражениях представляют сами себя, за исключением группы специальных символов "[ ] \ / ^ $ . | ? * + ( ) { }". Если эти символы нужно представить в качестве символов текста, их следует экранировать обратной косой чертой "\".

Если эти спецсимволы встречаются без обратной косой черты, значит у них особенные значения в регулярных выражениях:

  • "^ " - каретка, циркумфлекс или просто галочка. Начало строки;
  • "$ " - знак доллара. Конец строки;
  • ". " - точка. Любой символ;
  • "* " - знак умножения, звездочка. Любое количество предыдущих символов;
  • "+ " - плюс. 1 или более предыдущих символов;
  • " ? " - вопросительный знак. 0 или 1 предыдущих символов;
  • " ( ) " - круглые скобки. Группировка конструкций;
  • "| " - вертикальная линия. Оператор "ИЛИ";
  • " [ ] " - квадратные скобки. Любой из перечисленных символов, диапазон. Если первый символ в этой конструкции - "^ ", то массив работает наоборот - проверяемый символ не должен совпадать с тем, что перечислено в скобках;
  • "{ }" - фигурные скобки. Повторение символа несколько раз;
  • "\ " - обратный слеш. Экранирование служебных символов.

Также существуют специальные метасимволы, ими можно заменить некоторые готовые конструкции:

  • \b - обозначает не символ, а границу между символами;
  • \d - цифровой символ;
  • \D - нецифровой символ;
  • \s - пробельный символ;
  • \S - непробельный символ;
  • \w - буквенный или цифровой символ или знак подчеркивания;
  • \W - любой символ, кроме буквенного или цифрового символа или знака подчеркивания.

Введение в синтаксис PCRE

Синтакcис шаблонов, используемых в функциях этого раздела, во многом похож на синтаксис, используемый в Perl. Выражение должно быть заключено в разделители, например, прямые слеши '/'. Разделителем могут выступать произвольные символы, кроме буквенно-цифровых, обратного слеша '\' и нулевого байта. Если символ разделителя встречается в шаблоне, его необходимо экранировать. В качестве разделителя доступны комбинации, используемые в Perl: (), {}, [] и <>.

Далее перечислены все доступные на сегодняшний день модификаторы. Имя, взятое в круглые скобки, указывает внутреннее PCRE-имя для данного модификатора. Пробелы и переводы строк в модификаторах игнорируются, другие символы вызывают ошибки.

i (PCRE_CASELESS)

Если этот модификатор используется, символы в шаблоне соответствуют символам как верхнего, так и нижнего регистра.

m (PCRE_MULTILINE)

По умолчанию PCRE обрабатывает данные как однострочную символьную строку (даже если она содержит несколько разделителей строк). Метасимвол начала строки '^' соответствует только началу обрабатываемого текста, в то время как метасимвол "конец строки" '$' соответствует концу текста, либо позиции перед завершающим текст переводом строки (в случае, если модификатор D не установлен). В Perl ситуация полностью аналогична. Если этот модификатор используется, метасимволы "начало строки" и "конец строки" также соответствуют позициям перед произвольным символом перевода и строки и, соответственно, после, как и в самом начале и в самом конце строки. Это соответствует Perl-модификатору /m. В случае, если обрабатываемый текст не содержит символов перевода строки, либо шаблон не содержит метасимволов '^' или '$', данный модификатор не имеет никакого эффекта.

s (PCRE_DOTALL

Если данный модификатор используется, метасимвол "точка" в шаблоне соответствует всем символам, включая перевод строк. Без него - все символы, кроме переводов строк. Этот модификатор эквивалентен записи /s в Perl. Класс символов, построенный на отрицании, например [^a], всегда соответствует переводу строки, независимо от наличия этого модификатора.

x (PCRE_EXTENDED)

Если используется данный модификатор, неэкранированные пробелы, символы табуляции и пустой строки будут проигнорированы в шаблоне, если они не являются частью символьного класса. Также игнорируются все символы между неэкранированным символом '#' (если он не является частью символьного класса) и символом перевода строки (включая сами символы '\n' и '#'). Это эквивалентно Perl-модификатору /x, и позволяет размещать комментарий в сложных шаблонах. Замечание: это касается только символьных данных. Пробельные символы не фигурируют в служебных символьных последовательностях, к примеру, в последовательности '(?(', открывающей условную подмаску.

e (PREG_REPLACE_EVAL)

Если используется данный устаревший модификатор, preg_replace() после выполнения стандартных подстановок в заменяемой строке интерпретирует ее как PHP-код и использует результат для замены искомой строки. Одинарные и двойные кавычки, обратные слеши (\) NULL-символы будут проэкранированы обратными слешами в подставляемых обратных ссылках.

A (PCRE_ANCHORED)

Если используется данный модификатор, соответствие шаблону будет достигаться только в том случае, если он "заякорен", то есть соответствует началу строки, в которой производится поиск. Того же эффекта можно достичь подходящей конструкцией с вложенным шаблоном, которая является единственным способом реализации этого поведения в Perl.

D (PCRE_DOLLAR_ENDONLY)

Если используется данный модификатор, метасимвол $ в шаблоне соответствует только окончанию обрабатываемых данных. Без этого модификатора метасимвол $ соответствует также позиции перед последним символом, в случае, если им является перевод строки (но не распространяется на любые другие переводы строк). Данный модификатор игнорируется, если используется модификатор m. В языке Perl аналогичный модификатор отсутствует.

< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Алина Бёрнс
Алина Бёрнс
Ксения Птицына
Ксения Птицына

Когда можно будет пройти итоговую аттестацию