Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> PHP -> Регулярные выражения


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

Когда мы пишем скрипты, на любом языке веб программирования, нам часто приходится работать со строками (обрабатывать их). Пожалуй, самым мощным механизмом для этого являются регулярные выражения. Для человека, никогда не встречавшегося с регулярными выражениями, они могут показаться чем-то очень сложным. Надеюсь, что, прочитав эту статью, вы поймете, что это не так.

По сути, регулярное выражение это строка-шаблон, которая является параметром для нескольких php функций (о них ниже). Составляются эти выражения по определенным правилам. Существует два формата регулярных выражений PCRE(Perl- Compatible Regular Expression) и RegEX. Мы начнем рассматривать регулярные выражения именно с Perl совместимых. Их поддержка появилась только в PHP 4-ой версии. Выражения PCRE несколько более универсальны. Лично я предпочитаю использовать именно их.

Что можно сделать с помощью регулярных выражений? Ну, например, проверить правильность заполнения полей формы. Например, поля email. С их помощью можно производить поиск, замену, сопоставление и т.д. Однако злоупотреблять ими не стоит. Так, если вам нужно найти в тексте какое то определенное слово, то лучше воспользоваться обычными строковыми функциями. Почему лучше, спросите вы? Потому, что даже несколько строковых функций будут работать быстрее, чем одна регулярная.

Пускай теперь нужно найти в строке то, что содержит 5 цифр, и не содержит латинских букв. Реализовать это с помощью обычных функций можно, но сложно и неудобно. А с помощью регулярных выражений это делается одной строкой: /\d{5}\s[^a-zA-Z]/.

Регулярное выражение записывается между разделителями. В их качестве обычно используется слеш ('/'). Всё, что находится между разделителями - регулярное выражение. За последним разделителем может быть указан модификатор.
Например: /\d{5}\s[^a-zA-Z]/m. Кроме простых символов (т.е. тех, которые означают сами себя) регулярное выражение может содержать специальные символы. К ним относятся:".*?+[]{}|^$". Предусмотрены метасимволы, с помощью которых можно задать группу символов:
\d - все цифры от 0 до 9.
\D - всё кроме цифр.
\s - пробел или символ табуляции.
\S - всё, кроме того, что определяет \s.
\w - Буквы цифры и знак подчеркивания.
\W - всё, что не определяет предыдущий.
Это основные метасимволы. Более полный список вы можете найти в любой книге по Perl.

Пример: Выражение /\d\d/- задает двухзначное число.

Для отмены действия спецсимвола используется "\". Например: /ab\.c/. Точка воспримется именно как точка, а не как спецсимвол. Существует несколько спецсимволов, которые обозначают группу букв. "." - обозначает один любой символ. Т.е. /ab.c/ будет соответствовать abac, abdc, abzc и т.д.

Квадратные скобки используются, если нужно использовать один из нескольких указанных символов. [abc] - соответствует любому символу из данного множества. [abc]d - соответствует ad, bd, cd. Если символов много, и они идут подряд, то можно не перечислять их все, а указать первый и последний из них через дефис "-". Например выражение [a-zA-Z] будет соответствовать любой английской букве.

Символ "^" имеет два значения. Если он стоит первым в квадратных скобках, то означает отрицание. В этом случае регулярное выражение будет соответствовать любому символу кроме, тех, что указаны между "[^" и "]". Например: /a[^cd]b/ результат - все, что начинается буквой "а", после которой может стоять любой символ, кроме "c" и "d", заканчивается "b". Обратите внимание, что символ означает отрицание только тогда, если он стоит сразу после "[".

Если "^" стоит в начале регулярного выражения, то соответствует началу строки (позиции перед первым символом). Т.е. "^" показывает парсеру, что поиск нужно вести в начале строки.

Пример: /^333/. Поиск по тексту:

asd 333 ert
333 wer ytr
ert uuutr 333

Вернет только один результат 333 (тот который во второй строке). Аналогично, "$" - символ конца строки.

"|" - оператор альтернативы. С его помощью можно задавать альтернативы для групп символов. Пример: abc|^def|ghc. Выражения будут соответствовать строки, которые содержат подстроку abc, либо начинаются на def, либо содержат ghc (все три условия могут выполняться одновременно).

"(" и ")" - группирующие скобки. Они тоже могут выполнять несколько функций. Первая - группирующая. Например: abc1|abc2|abc3, можно заменить на abc(1Ӛӛ).

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

Квантификаторы повторений - специальные знаки, задающие число повторений предшествующих им символов.

"{" и "}" - указывают, сколько раз должен быть повторен предшествующий им символ.

(abc){n} - abc должно быть повторено ровно n раз
(abc){n,m} abc должно быть повторено от n до m раз
(abc){n,} abc должно быть повторено n раз и более
(abc){,m} abc должно быть повторено m раз, но не более.

"*" - предыдущий символ может быть повторен ноль, (то есть его может и не быть) или более раз.

"?"- ноль или одно совпадение.

"+" - одно или более совпадений.

Рассмотрим пример: /.*a/ - можно ожидать, что с помощью этого выражения мы найдем часть текста до первого вхождения буквы а. На самом же деле мы получим, часть текста до последнего вхождения этого символа. Происходит это потому, что, натыкаясь на "*" парсер предпринимает попытку найти, как можно более длинную строку. Это называется "жадностью квантификатора". Её можно ограничить с помощью символа "?": /.*?a/. Теперь все будет работать правильно. То же касается и спецсимвола "+".

В заключении расскажу о модификаторах:

i - парсер не будет различать большие и маленькие буквы. (Может не работать для русских букв).
m - Текст переданный парсеру регулярных выражений рассматривается, как строка. А если задан этот модификатор, то текст рассматривается, как есть (т.е. возможно из нескольких строк). Соответственно, при использовании символов начала и конца строки -"^" и "$", они будут указывать на начало и конец каждой строки.
s - Символ перевода строки попадает под определение спецсимвола ".". По умолчанию это не так.
U - Ограничивает жадность квантификаторов во всем регулярном выражении.

В следующей статье я рассмотрю функции для работы с выражениями PCRE, а также приведу полезные примеры по использованию регулярных выражений.

Автор: Neoweb
Источник: www.phpweb.ru

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.