Глава 29. PHP: Функции регулярных выражений и правила их формирования
Регулярные выражения — сочетания символов, позволяющих производить операции со строками (например, перевод строки) на основе заданного шаблона. Функции, которые позволяют поддерживать регулярные выражения, приведены ниже:
• ereg()
• ereg__replace()
• eregi()
• eregi_replace()
• split()
• spliti()
Все эти функции назначают строку регулярного выражения в качестве первого параметра. РНР использует установленные регулярные выражения POSIX, определенного как POSIX 1003.2.
Рассмотрим простые правила формирования шаблона.
Шаблон составляется из модификаторов, приведеныхв табл. 29.1.
Таблица 29.1. Набор модификаторов
Остальные модификаторы при необходимости можно изучить на сайте www.php.net.
Руководствуясь этими простейшими модификаторами, можно приступить к рассмотрению функции.
В РНР существует несколько функций для работы с регулярными выражениями: ereg(), ereg_replace(), eregi(), ereg_replacei().
Функции с суффиксом i аналогичны функциям без этого суффикса, но не чувствительны к регистру операндов.
Функция ereg() возвращает true, если заданные соответствия pattern были найдены в string, или если не были найдены никакие соответствия или же была вызвана ошибка работы программы.
Синтаксис функции ereg():
int ereg (string pattern, string string, array [regs]);
В качестве параметра string указывается строка, соответствие которой ищется в регулярном выражении, заданном в параметре pattern.
Если соответствия найдены в указанном регулярном выражении и функция вызывается вместе с третьим аргументом regs, то найденные соответствия будут записаны
в качестве элементов массива regs. $regs[1] будет содержать подстроку, начинающуюся с круглой скобки; $regs[2] будет содержать подстроку, начинающуюся со второй позиции, и т. д. $regs[0] будет содержать копию строки.
Если функция ereg() найдет какое-либо соответствие, $regs будет заполнена точно на десять элементов, Даже если было найдено больше или меньше соответствий. Если не было найдено ни одного совпадения $regs не будет изменен при помощи ereg().
Приведем пример:
ereg("abc", $string);
/* функция возвратит true,
если "abc" найдено в строке $string */
ereg("^abc", $string);
/* функция возвратит true, если "abc"
найдено в начале строки $string */
ereg("abc$", $string);
/* функция возвратит true, если "abc"
найдено в конце строки $string */
Чтобы произвести заменуподстроки в строке,используют функцию ereg_replace(). Ее синтаксис:
string ereg_replace (string pattern, string replacement, string string)
В качестве параметра pattern указывается подстрока, поиск которой осуществляется функцией ereg_replace(). В параметре replacement указывается сочетание символов, на которое будет заменяться найденная подстрока. В параметре string указывается исходная строка, в которой производится поиск. Другими словами, подстрока pattern будет найдена в строке string и заменена на replacement.
Приведем пример:
$string = ereg_replace("$", "<br>", $string);
/* функция позволит встроить тег
<br> в конец строки $string */
$string = ereg_replace("abc", "cba", $string);
/* функция позволит произвести замену
"abc" на "cba" в строке $string */
$string = ereg_replace("n", "", $string);
/* функция позволит избавиться
от новых строк символов в $ string */
Приведем пример, позволяющий более детально рассмотреть совместимость работы шаблона и изученных функций.
Возьмем электронный адрес temp@mail.ru. Очевидно, что правдоподобный адрес должен иметь вид слово@слово.слово. В терминах шаблонов произвольный символ обозначается знаком не будем сейчас учитывать тот факт, что в адресах допустимы не все символы). В каждом слове должен быть, по крайнеймере, один символ, таким образом, шаблон слова будет иметь вид . + . Вспомним теперь, что «.» — это модификатор, и для явного указания точки (в качестве символа) нужно писать «.» . Таким образом, шаблон будет иметь вид .+@.+..+.
Проверка будет иметь следующий вид:
if(ereg(".+@.+..+", $email)) {
echo "Адрес правильный";
else {
echo "Введите адрес заново";
}
После такой проверки можем быть уверены, e-mail имеет вид слово@слово.слово.