11111

preg_replace

Пред.

След.

preg_replace

(PHP 3 >= 3.0.9, PHP 4, PHP 5)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) соответствует вхождению всего шаблона.

Подмаски нумеруются слева направо, начиная с единицы.

- При использовании замены по шаблону с использованием ссылок на подмаски

может возникнуть ситуация, когда непосредственно за маской следует цифра.

В таком случае нотация вида \\n приводит к ошибке: ссылка на первую подмаску, за которой

следует цифра 1, запишется как \\11, что будет интерпретировано как ссылка на одиннадцатую подмаску.

Это недоразумение можно устранить, если воспользоваться конструкцией

\${1}1, указывающей на изолированную ссылку на первую подмаску, и следующую за ней

цифру 1.

-

Пример 1. Использование подмасок, за которыми следует цифра

<?php

$string = "April 15, 2003";

$pattern = "/(\w+) (\d+), (\d+)/i";

$replacement = "\${1}1,\$3";

echo preg_replace($pattern, $replacement, $string);

?>

- Результатом работы этого примера будет:

April1,2003

- Если во время выполнения функции были обнаружены совпадения с шаблоном,

будет возвращено измененное значение subject,

в противном случае будет возвращен исходный текст subject.

- Первые три параметра функции preg_replace()

могут быть одномерными массивами. В случае, если массив использует ключи, при обработке массива

они будут взяты в том порядке, в котором они расположены в массиве.

Указание ключей в массиве для pattern и replacement не

является обязательным.

Если вы все же решили использовать индексы, для сопоставления шаблонов и строк, участвующих в замене,

используйте функцию ksort() для каждого из массивов.

-

Пример 2. Использование массивов с числовыми индексами в качестве аргументов функции preg_replace()

<?php

$string = "The quick brown fox jumped over the lazy dog.";

$patterns[0] = "/quick/";

$patterns[1] = "/brown/";

$patterns[2] = "/fox/";

$replacements[2] = "bear";

$replacements[1] = "black";

$replacements[0] = "slow";

echo preg_replace($patterns, $replacements, $string);

?>

- Результат:

The bear black slow jumped over the lazy dog.

- Используя ksort(), получаем желаемый результат:

<?php

ksort($patterns);

ksort($replacements);

echo preg_replace($patterns, $replacements, $string);

?>

- Результат:

The slow black bear jumped over the lazy dog.

- В случае, если параметр subject является массивом,

поиск и замена по шаблону производятся для каждого из его элементов.

Возвращаемый результат также будет массивом.

- В случае, если параметры pattern и replacement являются

массивами, preg_replace() поочередно извлекает из обоих массивов

по паре элементов и использует их для операции поиска и замены.

Если массив replacement содержит больше элементов, чем

pattern, вместо недостающих элементов для замены будут взяты пустые строки.

В случае, если pattern является массивом, а replacement - строкой,

по каждому элементу массива pattern будет осущесвтлен поиск

и замена на pattern (шаблоном будут поочередно все элементы массива, в то время как строка замены остается фиксированной).

Вариант, когда pattern является строкой, а replacement - массивом, не имеет смысла.

- Модификатор /e меняет поведение функции preg_replace() таким образом,

что параметр replacement после выполнения необходимых подстановок интерпретируется как PHP-код и

только после этого используется для замены. Используя данный модификатор, будьте внимательны:

параметр replacement должен содержать корректный PHP-код,

в противном случае в строке, содержащей вызов функции preg_replace(), возникнет

ошибка синтаксиса.

-

Пример 3. Замена по нескольким шаблонам

<?php

$patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/",

"/^\s*{(\w+)}\s*=/");

$replace = array ("\\3/\\4/\\1\\2", "$\\1 =");

echo preg_replace($patterns, $replace, "{startDate} = 1999-5-27");

?>

- Этот пример выведет:

$startDate = 5/27/1999

-

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

<?php

preg_replace("/(<\/?)(\w+)([^>]*>)/e",

"'\\1'.strtoupper('\\2').'\\3'",

$html_body);

?>

- Преобразует все HTML-теги к верхнему регистру

-

Пример 5. Конвертор HTML в текст

<?php

// $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().

Пред.

Начало

След.

preg_replace_callback

Уровень выше

preg_split 22222

Free Web Hosting