Вы не зарегистрированы? Нажмите здесь для регистрации.
Забыли пароль? Запросите новый здесь.
|
Вы должны авторизироваться, чтобы добавить сообщение.
|
|
|
Последние активные темы форума |
|
preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5) preg_replace_callback -- Выполняет поиск по регулярному выражению и замену с использованием функции обратного вызова
Описаниеmixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] ) Поведение этой функции во многом напоминает
preg_replace(), за исключением того, что вместо
параметра replacement необходимо указывать
callback функцию, которой в качестве
входящего параметра передается массив найденных вхождений.
Ожидаемый результат - строка, которой будет произведена замена.
Пример 1. preg_replace_callback() пример
<?php
// Этот текст был использован в 2002 году
// мы хотим обновить даты к 2003 году
$text
=
"April fools day is 04/01/2002\n"
;
$text
.=
"Last christmas was 12/24/2001\n"
;
// функция обратного вызова
function
next_year
(
$matches
)
{
// как обычно: $matches[0] - полное вхождение шаблона
// $matches[1] - вхождение первой подмаски,
// заключенной в круглые скобки, и так далее...
return
$matches
[
1
].(
$matches
[
2
]+
1
);
}
echo
preg_replace_callback
(
"|(\d{2}/\d{2}/)(\d{4})|"
,
"next_year"
,
$text
);
// результат:
// April fools day is 04/01/2003
// Last christmas was 12/24/2002
?>
|
|
Достаточно часто callback функция, кроме как в вызове
preg_replace_callback(), ни в чем больше не участвует.
Исходя из этих соображений, можно использовать create_function()
для создания безымянной функции обратного вызова непосредственно
в вызове preg_replace_callback().
Если вы используете такой подход, вся информация, связанная с заменой по
регулярному выражению, будет собрана в одном месте, и пространство имен
функций не будет загромождаться неиспользуемыми записями.
Пример 2. preg_replace_callback() и create_function()
<?php
/* фильтр, подобный тому, что используется в системах Unix
* для преобразования в заглавные начальных букв параграфа */
$fp
=
fopen
(
"php://stdin"
,
"r"
) or die(
"can't read stdin"
);
while (!
feof
(
$fp
)) {
$line
=
fgets
(
$fp
);
$line
=
preg_replace_callback
(
'|<p>\s*\w|'
,
create_function
(
// Использование одиночных кавычек в данном случае принципиально,
// альтернатива - экранировать все символы '$'
'$matches'
,
'return strtolower($matches[0]);'
),
$line
);
echo
$line
;
}
fclose
(
$fp
);
?>
|
|
Смотрите также preg_replace() и
create_function().
|
· Гостей: 20
· Пользователей: 0
· Всего пользователей: 453
· Новый пользователь: ZDA
|
|