Вы не зарегистрированы? Нажмите здесь для регистрации.
Забыли пароль? Запросите новый здесь.
|
Вы должны авторизироваться, чтобы добавить сообщение.
|
|
|
Последние активные темы форума |
|
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
);
?>
|
Результатом работы этого примера будет:
|
Если во время выполнения функции были обнаружены совпадения с шаблоном,
будет возвращено измененное значение 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"
);
?>
|
Этот пример выведет:
|
Пример 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().
|
· Гостей: 19
· Пользователей: 0
· Всего пользователей: 453
· Новый пользователь: ZDA
|
|