top

Описание функции preg-replace



preg_replace


(PHP 3>= 3.0.9, PHP 4)
preg_replace - выполняет поиск и замену регулярного выражения.

Описание


mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit])
Ищет в subject совпадения с pattern и замещает их replacement . Если limit специфицирован, то замещаются только limit совпадений; если limit опущен или равен -1, замещаются все совпадения.
Replacement может содержать ссылку в форме \\ n или (начиная с PHP 4.0.4) $n , где последняя форма предпочтительнее. Каждая такая ссылка замещается текстом, захваченным n 'ным патэрном в скобках. n может быть от 0 до 99, а \\0 или $0 ссылаются на текст, совпавший со всем патэрном. Открывающие скобки подсчитываются слева направо (начиная с 1) для получения количества захватывающих субпатэрнов.
Если совпадения найдены, возвращается новый subject , иначе subject возвращается без изменений.
Каждый параметр preg_replace() может быть массивом.
Если subject это массив, то поиск и замена выполняются в каждом вхождении subject , return-значение также будет массивом.
Если pattern и replacement являются массивами, то preg_replace() принимает значение из каждого массива и использует их для выполнения поиска и замены в subject . Если replacement имеет меньше значений, чем pattern , то для оставшихся значений для замены используется пустая строка. Если pattern это массив, а replacement это строка, то эта замещающая строка используется для каждого значения pattern . Обратное не будет иметь смысла.
Модификатор /e делает так, что preg_replace() рассматривает параметр replacement как PHP-код после выполнения соответствующей замены ссылок.
Подсказка : убедитесь, что replacement образует строку правильного PHP-кода, иначе PHP сообщит об ошибке разбора в строчке с preg_replace() .
Пример 1. Замена различных значений


$patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/",
                   "/^\s*{(\w+)}\s*=/");
$replace = array ("\\3/\\4/\\1\\2", "$\\1 =");
print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");



Этот пример даст:


$startDate = 5/27/1999


Пример 2. Использование модификатора /e


preg_replace ("/(<\/?)(\w+)([^>]*>)/e", 
              "'\\1'.strtoupper('\\2').'\\3'", 
              $html_body);



Это переведёт в верхний регистр все тэги HTML в тексте ввода.
Пример 3. Конвертация HTML в текст


// $document должен содержать HTML-документ.
// Здесь будут удалены тэги HTML, разделы javascript
// и пустое пространство. Также некоторые обычные элементы
// HTML конвертируются в их текстовые эквиваленты.

$search = array ("'<script[^>]*?>.*?</script>'si",  // Вырезается javascript
                 "'<[\/\!]*?[^<>]*?>'si",           // Вырезаются html-тэги
                 "'([\r\n])[\s]+'",                 // Вырезается пустое пространство
                 "'&(quot|#34);'i",                 // Замещаются html-элементы
                 "'&(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");                    // вычисляется как php

$replace = array ("",
                  "",
                  "\\1",
                  "\"",
                  "&",
                  "<",
                  ">",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(\\1)");

$text = preg_replace ($search, $replace, $document);



Примечание: параметр limit был введён после PHP 4.0.1pl2.

См. также preg_match() , preg_match_all() и preg_split() .
corner
My pencil ;)
Главная     Сервисы     Портфолио     Проги     Видео     Контакты     Ссылки     Текст