|
(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"); |
|
Этот пример даст:
Пример 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(). | |