PHP поддерживает ряд функций для работы с Perl-совместимыми регулярными выражениями (PCRE - Perl Compatible Regular Expression). Такие выражения заключаются в ограничители, в качестве которых, как правило, используется прямой слеш:
/mail/
Это выражение соответствует строке, содержащей слово "mail".
За ограничителями могут следовать модификаторы, уточняющие регулярное выражение. Наиболее часто используют следующие модификаторы:
i (Игнорировать регистр при поиске соответствия. Т. е. выражение "/mail/i" будет соответствовать как строке "MAIL", так и строке "mail".);
x (Игнорировать пробельные символы).
Для PCRE-выражений характерно применение общих типов символов, которые аналогичны классам символов для регулярных выражений в стиле POSIX. Наиболее часто встречающиеся общие типы символов приведены ниже.
\d - соответствие десятичной цифре
\D - соответствие любому символу, за исключением десятичных цифр
\s - соответствие пробельным символам
\S - соответствие любым символам, кроме пробельных
\h - наличие границы слова
\B - отсутствие границы слова
\Z - конец строки или символ перевода конца строки
\A - начало строки
Теперь рассмотрим основные функции, которые есть в PHP для работы с PCRE-выражениями.
Эта функция ищет в строке subject соответствие регулярному выражению pattern. Если задан необязательный параметр matches, то результаты поиска помещаются в массив.
Приведем несколько примеров.
<?$str = "PHP один из лучших языков программирования для Web";if (preg_match ("/php/i", $str))
{
echo("Соответствие найдено");
}else
{
echo("Соответствие не найдено");
}?>
Результат:
Соответствие найдено
<?$str = "PHP один из лучших языков программирования для Web";if (preg_match ("/\bweb\b/i", $str))
{
echo("Соответствие найдено");
}else
{
echo("Соответствие не найдено");
}?>
Результат:
Соответствие найдено
<?
// получаем www-адрес (имя хоста) из url$url = "http://www.php.net/download.html";preg_match("/^(http:\/\/)?([^\/]+)/i", $url, $matches);$host = $matches[2];
echo("www-адрес: $host");
echo("<br>");
// получаем последние два сегмента имени хоста (доменное имя)preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "доменное имя: {$matches[0]}\n";?>
Эта функция ищет в строке subject соответствия регулярному выражению pattern, и заменяет их на replacement. Необязательного параметр limit задает число соответствий, которые надо заменить. Если этот параметр не указан, или равен -1, то заменяются все найденные соответствия.