logo
Vvedenie_v_Veb_programmirovanien_2 / Vvedenie_v_Veb_programmirovanien_2

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

Появление Web породило необходимость в эффективных средствах поиска данных, которые бы позволяли быстро находить нужную информацию. Одним из способов поиска являются механизмы поиска по шаблону, которые решают следующие основные задачи:

-поиск строк, в точности совпадающих с заданным шаблоном;

-поиск фрагментов строк, совпадающих с заданным шаблоном;

-замену строк и подстрок по шаблону;

-поиск строк, с которыми заданный шаблон не совпадает.

Базовым средством для поиска по шаблону являются регулярные выражения. Регулярное выражение представляет собой последовательность символов, применяемых для поиска искомого текста. Простейшее регулярное выражение совпадает с одним или несколькими символами строки, например, последовательность мan совпадает в любой строке, содержащей эти символы (например, mango, man).

Символы, указывающие расположение искомого элемента в строке. Служебные символы $ и ^ не совпадают с символами, а указывают позиции в строке. Например, выражение р$ означает строку, которая завершается символом р, а выражение ^р - строку, начинающуюся с символа р.

Escape последовательности.

\ . – Шаблону соответствует знак точки в строке.

\n – Символ перевода строки. Строка\nЕще строка

\r – Символ возврата каретки. Текст\r

\t – Символ табуляции. \tКрасная строка

\v – Символ вертикальной табуляции. \vнекоторый текст

Задание группы символов.

Квадратные скобки ([ ]) означают “любой символ из перечисленных в скобках”. Ниже перечислены некоторые часто используемые интервалы, с помощью знака -:

Существует класс служебных символов, обозначающих количество повторений отдельного символа или конструкции, заключенной в квадратные скобки. Эти служебные символы (+, * и {...}) называются квантификаторами. Принцип их действия проще всего пояснить на примерах:

р+ означает один или несколько символов р, стоящих подряд;

р* означает ноль и более символов р, стоящих подряд;

р? означает ноль или один символ р;

р{2} означает два символа р, стоящих подряд;

р{2,3} означает от двух до трех символов р, стоящих подряд;

р{2,} означает два и более символов р, стоящих подряд.

В группе символов ^ соответствует отрицанию последующих символов, то есть указывает символы, не соответствующие шаблону. [^\n\t]

Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).

Служебный символ . (точка) означает <любой символ>. Например, выражение р.р совпадает с символом р, за которым следует произвольный символ, после чего опять следует символ р.

Логическое определение.

| – подобен оператору || (OR) в логическом выражении. Оператор | (или) проверяет совпадение одной из нескольких альтернатив. Например, регулярное выражение php | my проверяет строку на наличие php или my.

( ) – Логическая группировка выражений, которая (может)+ повторяться.

Объединение служебных символов приводит к появлению более сложных выражений. Рассмотрим несколько примеров:

^.{2}$ - любая строка, содержащая ровно два символа;

<b>(.*)</b> - произвольная последовательность символов, заключенная между <b> и </b >;

p(hp)* - символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).

Иногда требуется найти служебные символы в строках вместо того, чтобы использовать их в описанном специальном контексте. В этом случае служебные символы экранируются обратной косой чертой (\).

Perl считается одним из лучших языков обработки текстов. Разработчики РHР сделали синтаксис регулярных выражений Perl доступным для пользователей РНР. Регулярные выражения из нескольких символов в стиле Perl записываются в косых скобках. Рассмотрим простой пример: /stud/. Если записать /stud/i, поиск осуществляется без учета регистра. /^stud/i означает, что stud должно находится в начале слова (student), а /stud$/ - в конце (restud). Регулярное выражение /^$/i соответствует пустой строке.

Квадратные скобки /[абвг ]/ означают “любой один символ а,б,в или г из перечисленных в скобках”. Для создания регулярных выражений могут быть использованы интервалы. Ниже перечислены некоторые интервалы, задаваемые с помощью знака -:

/[0-9]/ - совпадает с любой десятичной цифрой от 0 до 9;

/[a-z]/ - совпадает с любым символом нижнего регистра от а до z;

/[A-Z]/ - совпадает с любым символом верхнего регистра от А до Z;

/[a -Z]/ - совпадает с любым символом нижнего или верхнего регистра от а до Z.

Специальные символы представляет собой алфавитный символ с префиксом \ - признаком особой интерпретации следующего символа:

\d - обозначает любую десятичную цифру;

\D - обозначает любой символ кроме десятичной цифры;

\w - алфавитно-цифровой символ

\W - символ, не являющийся алфавитно-цифровым

\s - пробельный символ

\S - символ не являющийся пробельным

\ . – Шаблону соответствует знак точки в строке.

\n – Символ перевода строки. Строка\nЕще строка

\r – Символ возврата каретки. Текст\r

\t – Символ табуляции. \tКрасная строка

\\ – Обратный слеш

Еще один символ \b, совпадает с границами слов: /sa\b/. Противоположный символ, \В, совпадает с чем угодно, кроме границы слова: /sa\B/

Символы +, * и {...}, обозначающие количество повторений отдельного символа или конструкции, заключенной в квадратные скобки, называются квантификаторами. Принцип их действия проще всего пояснить на примерах:

[р]+ означает один или несколько символов р, стоящих подряд;

[р]* означает ноль и более символов р, стоящих подряд;

[р]? означает ноль или один символ р;

[р]{2} означает два символа р, стоящих подряд;

[р]{2,3} означает от двух до трех символов р, стоящих подряд;

[р]{2,} означает два и более символов р, стоящих подряд.

Шаблон /stu+/ совпадает с последовательностью stu, за которой могут следовать дополнительные символы u. Рассмотрим другой пример использования квантификатора: /st{2,4}/. Этот шаблон совпадает с символом s, за которым следуют от 2 до 4 экземпляров символа t.

Символ ^ в группе символов соответствует отрицанию последующих символов, то есть указывает символы, не соответствующие шаблону. [^\n\t]

Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).

Служебный символ . (точка) означает любой символ поэтому для поиска точки ее надо экранировать символом \.

Например, выражение /[\d]+/ используется для поиска цифровой подстроки, выражение /([\d]+)000/ может использоваться при поиске денежных сумм.

Шаблон /<([\w]+)>/ совпадает с конструкциями, заключенными в угловые скобки, - например, тёгами HTML.

Подстроки в регулярных выражениях можно группировать при помощи круглых скобок: /домен – (by|ru|uk|com)/ соответствует строке домен – by или другой.

| – подобен оператору || (OR) в логическом выражении. Оператор | (или) проверяет совпадение одной из нескольких альтернатив. ( ) – Логическая группировка выражений, которая (может)+ повторяться.