Воскресенье, 20.07.2025, 10:51 Приветствую Вас Гость

On-line: Книги, учебники, статьи

Главная | Регистрация | Вход | RSS

Perl-совместимые регулярные выражения

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-выражениями.
preg_match()
  int preg_match (string pattern, string subject [, array matches])

Эта функция ищет в строке 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("
");
  // получаем последние два сегмента имени хоста (доменное имя)
  preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
  echo "доменное имя: {$matches[0]}\n";
?>

Результат:
www-адрес: www.php.net
доменное имя: php.net
preg_replace()
mixed preg_replace (mixed pattern, mixed replacement, mixed subject
  [,int limit])

Эта функция ищет в строке subject соответствия регулярному выражению pattern, и заменяет их на replacement. Необязательного параметр limit задает число соответствий, которые надо заменить. Если этот параметр не указан, или равен -1, то заменяются все найденные соответствия.
  $str = "May 15, 2003";
  $pattern = "/(\w+) (\d+), (\d+)/i";
  $replacement = "1 \${1} \$3";
  print preg_replace($pattern, $replacement, $str);
?>

Результат:
1 May 2003

А вот как можно написать функцию, которая будет практически полным аналогом функции htmlspecialchars.
  function my_htmlspecialchats($document)
  {
  $search = array ("']*?>.*?'si",  
  "'<[\/\!]*?[^<>]*?>'si",  
  "'([\r\n])[\s]+'",  
  "'&(quot|#34);'i",  
  "'&(amp|#38);'i",
  "'&(lt|#60);'i",
  "'&(gt|#62);'i",
  "'&(nbsp|#160);'i",
  "'&(iexcl|#161);'i",
  "'&(cent|#162);'i",
  "'&(pound|#163);'i",
  "'&(copy|#169);'i",
  "'&#(\d+);'e");
  $replace = array ("",
  "",
  "\\1",
  "\"",
  "&",
  "<",
  ">",
  " ",
  chr(161),
  chr(162),
  chr(163),
  chr(169),
  "chr(\\1)");
  $text = preg_replace ($search, $replace, $document);
  return $text;
  }
  $doc = "alert;"; // напишем java-скрипт
  my_htmlspecialchats($doc); // выводит "alert;"
  echo($doc);
?>











Вход на сайт
Поиск
Календарь
«  Июль 2025  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей
Наш опрос
Как Вам удобнее??
Всего ответов: 341
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0