Регулярное выражение (regular expression, regexp, регэксп) - механизм, позволяющий задать шаблон для строки и осуществить поиск данных, соответствующих этому шаблону в заданном тексте. Кроме того, дополнительные функции по работе с regexp'ами позволяют получить найденные данные в виде массива строк, произвести замену в тексте по шаблону, разбиение строки по шаблону и т.п.
Некоторые символы, встречающиеся в строке рассматриваются не как обычные символы, а как имеющие специальное значение (т.н. метасимволы). Одним из самых важных метасимволов является символ обратного слэша ('\'). Если в строке встречается этот символ, то парсер рассматривает символ, непосредственно следующий за ним двояко:
· если следующий символ в обычном режиме имеет какое-либо специальное значение, то он теряет это свое специальное значение и рассматривается как обычный символ. Это необходимо для того, чтобы иметь возможность вставлять в строку специальные символы, как обычные. Например, метасимвол '.', в обычном режиме означает " любой единичный символ ", а '\.' означает просто точку. Также можно лишить специального значения и сам этот символ: '\\'.
· если следующий символ в обычном режиме не имеет никакого специального значения, то он может получить такое значение, будучи соединенным с символом '\'. К примеру символ 'd' в обычном режиме воспринимается просто как буква, однако, будучи соединенной с обратным слэшем ('\d') становится метасимволом, означающим " любая цифра ".
Метасимволы для задания символов, не имеющих изображения
\t | символ табуляции | \r | перевод каретки | \n | новая строка | \f | перевод страницы |
Метасимволы для задания групп символов
\w | алфавитно-цифровой или '_' символ | \s | один пробел | \d | одна цифра |
\W | не -//- | \S | один не пробел | \D | одна не цифра |
|
/\w\s\d\d/ | Буква, пробел (или табуляция) и двузначное число ('A 01', 'z 45', 'S 18') |
/\d and \d/ | Любая из следующих строк: '1 and 2', '9 and 5', '3 and 4'. |
[0-9A-Fa-f] | Цифра в шестнадцатиричной системе счисления |
[\dA-Fa-f] | То же самое, но с использованием метасимвола |
[02468] | Четная цифра |
[^\d] | Все, кроме цифр (аналог метасимвола \D) |
[a^b] | Любой из символов 'a', 'b', '^'. Здесь символ '^' не имеет какого-либо специального значения, потому что стоит не на первой позиции внутри квадратных скобок. |
Модификаторы:
i | Включение режима case-insensitive, т.е. большие и маленькие буквы в выражении не различаются. |
m | Указывает на то, что текст, по которому ведется поиск, должен рассматриваться как состоящий из нескольких строк. По умолчанию механизм регулярных выражений рассматривает текст как одну строку вне зависимости от того, чем она является на самом деле. Соответственно метасимволы '^' и '$' указывают на начало и конец всего текста. Если же этот модификатор указан, то они будут указывать соответственно на начало и конец каждой строки текста. |
s | По умолчанию метасимвол '.' не включает в свое определение символ перевода строки. Т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора снимает это ограничение. |
U | Делает все количественные метасимволы "не жадными" по умолчанию |
Функции, которые поддерживают регулярные выражения:
ereg_replace - заменяет регулярное выражение ereg - поиск совпадений регулярного выражения
|
eregi_replace - заменяет регулярное выражение без учёта регистра символов
eregi - поиск совпадений регулярного выражения без учёта регистра символов
split - делит строку на массив с помощью регулярного выражения
spliti - делит строку на массив с помощью регулярного выражения без учёта регистра символов
Все эти функции принимают строку регулярного выражения как их первый параметр.
ereg("abc",$string); /* Возвращает 'истина', если "abc" найдено в $string. */
ereg("^abc",$string); /* Возвращает 'истина', если "abc" найдено в начале $string. */
ereg("abc$",$string); /* Возвращает 'истина', если "abc" найдено в конце $string.*/
eregi("(ozilla.[23]|MSIE.3)",$HTTP_USER_AGENT);/*'истина', ес браузер клиента - Netscape 2, 3 или MSIE 3.*/
ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string, $regs);/* Помещает 3слова - $regs[1], $regs[2] и $regs[3], разделенные пробелом. */
ereg_replace("^","<BR>",$string); /* Устанавливает тег <BR> в начало строки $string. */
ereg_replace("$","<BR>",$string); /* Устанавливает тег <BR> в конец строки $string. */
ereg_replace("\n","",$string); /* Отсекает символ "возврат каретки" в строке $string. */