Php preg replace callback примеры

preg_replace_callback_array

Поведение этой функции похоже на preg_replace_callback() , за исключением того, что для каждого шаблона используется своя функция обратного вызова.

Список параметров

Ассоциативный массив, связывающий шаблоны регулярного выражения (ключи) и callable (значения).

Строка, в которой будет производиться поиск и замена.

Максимальное количество замен для каждого шаблона в строке subject . По умолчанию -1 (без ограничений).

Если задан, то в указанную переменную будет записано количество произведённых замен.

flags может быть комбинацией флагов PREG_OFFSET_CAPTURE и PREG_UNMATCHED_AS_NULL , которые влияют на формат массива совпадений. Смотрите описание в preg_match() для более подробной информации.

Возвращаемые значения

preg_replace_callback_array() возвращает массив, если параметр subject является массивом и строку, если строкой. В случае возникновения ошибки возвращается null

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

Ошибки

Если переданный шаблон регулярного выражения не компилируется в допустимое регулярное выражение, выдаётся ошибка уровня E_WARNING .

Список изменений

Версия Описание
7.4.0 Добавлен параметр flags .

Примеры

Пример #1 Пример использования preg_replace_callback_array()

preg_replace_callback_array (
[
‘~[a]+~i’ => function ( $match ) echo ‘Найдено ‘ , strlen ( $match [ 0 ]), ‘ совпадений «a»‘ , PHP_EOL ;
>,
‘~[b]+~i’ => function ( $match ) echo ‘Найдено ‘ , strlen ( $match [ 0 ]), ‘ совпадений «b»‘ , PHP_EOL ;
>
],
$subject
);
?>

Результат выполнения данного примера:

Найдено 6 совпадений "a" Найдено 3 совпадений "b"

Смотрите также

  • Шаблоны PCRE
  • preg_replace_callback() — Выполняет поиск по регулярному выражению и замену с использованием callback-функции
  • preg_quote() — Экранирует символы в регулярных выражениях
  • preg_replace() — Выполняет поиск и замену по регулярному выражению
  • preg_last_error() — Возвращает код ошибки выполнения последнего регулярного выражения PCRE
  • Анонимные функции

User Contributed Notes 3 notes

Based on some tests, I found these important traits of the function. (These would
be nice to see documented as part of its spec, e.g. for confirmation. Without that,
this is just experimental curiosity. Still better than guesswork, though! 😉 )

1. Changes cascade over a subject across callbacks, i.e. a change made to a
subject by a callback will be seen by the next callback, if its pattern matches
the changed subject.
(But a change made by a previous call of the *same* callback (on any subject)
will not be seen by that callback again.)

Читайте также:  Meta classes in java

2. The pattern + callback pairs will be applied in the order of their appearance
in $patterns_and_callbacks.

3. The callback can’t be null (or ») for a quick shortcut for empty replacements.

4. Overall, the algorithm starts iterating over $patterns_and_callbacks, and then
feeds each $subject to the current callback, repeatedly for every single match
of its pattern on the current subject (unlike «preg_match_all», that is, which
can do the same in one go, returning the accumulated results in an array).

This basically means that the «crown jewel», an even more efficient function:
«preg_replace_all_callback_array» is still missing from the collection.

(Of course, that would better fit a new design of the regex API, where one
API could flexibly handle various different modes via some $flags = [] array.)

5. (This last one is not specific to this function, but inherent to regexes, OTOH,
it’s probably more relevant here than anywhere else in PHP’s regex support.)

Even apparently simple cases can generate a crazy (and difficult-to-predict)
number of matches, and therefore callback invokations, so remember the set
$limit, where affordable. But, of course, try to sharpen your patterns first!

E.g. use ^. $ anchoring to avoid unintended extra calls on matching substrings
of a subject, (I.e. ‘/.*/’, without anchoring, would match twice: once for the
whole subject, and then for a trailing empty substring — but I’m not quite sure
this should actually be correct behavior, though.)

Источник

preg_replace_callback

Поведение этой функции во многом напоминает preg_replace() , за исключением того, что вместо параметра replacement необходимо указывать callback -функцию.

Список параметров

Искомый шаблон. Может быть как строкой, так и массивом строк.

Вызываемая callback-функция, которой будет передан массив совпавших элементов из строки subject . Callback-функция должна вернуть строку с заменой. Callback-функция должна быть описана так:

Достаточно часто callback функция, кроме как в вызове preg_replace_callback() , ни в чем больше не участвует. Исходя из этих соображений, можно использовать анонимные функции для создания callback-функции непосредственно в вызове preg_replace_callback() . Если вы используете такой подход, вся информация, связанная с заменой по регулярному выражению, будет собрана в одном месте, и пространство имен функций не будет загромождаться неиспользуемыми записями.

Пример #1 preg_replace_callback() и анонимная функция

/* фильтр, подобный тому, что используется в системах Unix
* для преобразования заглавных букв в началье параграфа в строчные */
$fp = fopen ( «php://stdin» , «r» ) or die( «не удалось прочесть stdin» );
while (! feof ( $fp )) $line = fgets ( $fp );
$line = preg_replace_callback (
‘|

Читайте также:  Php session write path

\s*\w|’ ,
function ( $matches ) return strtolower ( $matches [ 0 ]);
>,
$line
);
echo $line ;
>
fclose ( $fp );
?>

Строка или массив строк для поиска и замены.

Максимально возможное количество замен для каждого шаблона в каждой строке subject . По умолчанию равно -1 (без ограничений).

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

Возвращаемые значения

preg_replace_callback() возвращает массив, если параметр subject является массивом, иначе возвращается строка. В случае ошибок возвращается NULL

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

Список изменений

Версия Описание
5.1.0 Добавлен параметр count

Примеры

Пример #2 Пример использования preg_replace_callback()

// Этот текст был использован в 2002 году
// мы хотим обновить даты к 2003 году
$text = «День дураков: 01/04/2002\n» ;
$text .= «Последнее Рождество было: 24/12/2001\n» ;
// callback-функция
function next_year ( $matches )
// как обычно: $matches[0] — полное вхождение шаблона
// $matches[1] — вхождение первой подмаски,
// заключенной в круглые скобки, и так далее.
return $matches [ 1 ].( $matches [ 2 ]+ 1 );
>
echo preg_replace_callback (
«|(\d/\d/)(\d)|» ,
«next_year» ,
$text );

Результат выполнения данного примера:

День дураков: 01/04/2003 Последнее Рождество было: 24/12/2002

Пример #3 Рекурсивная обработка BB-кодов с помощью preg_replace_callback()

$input = «верх [indent] глубже [indent] еще глубже [/indent] глубже [/indent] верх» ;

function parseTagsRecursive ( $input )

return preg_replace_callback ( $regex , ‘parseTagsRecursive’ , $input );
>

$output = parseTagsRecursive ( $input );

Смотрите также

  • «Регулярные выражения PCRE»
  • preg_quote() — Экранирует символы в регулярных выражениях
  • preg_replace() — Выполняет поиск и замену по регулярному выражению
  • preg_last_error() — Возвращает код ошибки выполнения последнего регулярного выражения PCRE
  • «Анонимные функции»
  • информация о типе callback

Источник

preg_replace_callback

Поведение этой функции во многом напоминает preg_replace() , за исключением того, что вместо параметра replacement необходимо указывать callback -функцию.

Список параметров

Искомый шаблон. Может быть как строкой, так и массивом строк.

Вызываемая callback-функция, которой будет передан массив совпавших элементов из строки subject . Callback-функция должна вернуть строку с заменой. Callback-функция должна быть описана так:

Достаточно часто callback функция, кроме как в вызове preg_replace_callback() , ни в чем больше не участвует. Исходя из этих соображений, можно использовать анонимные функции для создания callback-функции непосредственно в вызове preg_replace_callback() . Если вы используете такой подход, вся информация, связанная с заменой по регулярному выражению, будет собрана в одном месте, и пространство имен функций не будет загромождаться неиспользуемыми записями.

Читайте также:  Is javascript working on my browser

Пример #1 preg_replace_callback() и анонимная функция

/* фильтр, подобный тому, что используется в системах Unix
* для преобразования заглавных букв в начале параграфа в строчные */
$fp = fopen ( «php://stdin» , «r» ) or die( «не удалось прочесть stdin» );
while (! feof ( $fp )) $line = fgets ( $fp );
$line = preg_replace_callback (
‘|

\s*\w|’ ,
function ( $matches ) return strtolower ( $matches [ 0 ]);
>,
$line
);
echo $line ;
>
fclose ( $fp );
?>

Строка или массив строк для поиска и замены.

Максимально возможное количество замен для каждого шаблона в каждой строке subject . По умолчанию равно -1 (без ограничений).

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

flags может быть комбинацией флагов PREG_OFFSET_CAPTURE и PREG_UNMATCHED_AS_NULL , которые влияют на формат массива совпадений. Смотрите описание в preg_match() для более подробной информации.

Возвращаемые значения

preg_replace_callback() возвращает массив, если параметр subject является массивом, иначе возвращается строка. В случае ошибок возвращается null

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

Список изменений

Версия Описание
7.4.0 Добавлен параметр flags .

Примеры

Пример #2 Пример использования preg_replace_callback()

// Этот текст был использован в 2002 году
// мы хотим обновить даты к 2003 году
$text = «День смеха был 01/04/2002\n» ;
$text .= «Последнее Рождество было 24/12/2001\n» ;
// callback-функция
function next_year ( $matches )
// как обычно: $matches[0] — полное вхождение шаблона
// $matches[1] — вхождение первой подмаски,
// заключенной в круглые скобки и так далее.
return $matches [ 1 ].( $matches [ 2 ]+ 1 );
>
echo preg_replace_callback (
«|(\d/\d/)(\d)|» ,
«next_year» ,
$text );

Результат выполнения данного примера:

День смеха был 01/04/2003 Последнее Рождество было 24/12/2002

Пример #3 Рекурсивная обработка BB-кодов с помощью preg_replace_callback()

$input = «верх [indent] глубже [indent] еще глубже [/indent] глубже [/indent] верх» ;

function parseTagsRecursive ( $input )

return preg_replace_callback ( $regex , ‘parseTagsRecursive’ , $input );
>

$output = parseTagsRecursive ( $input );

Смотрите также

  • Регулярные выражения PCRE
  • preg_replace_callback_array() — Выполняет поиск и замену по регулярному выражению с использованием функций обратного вызова
  • preg_quote() — Экранирует символы в регулярных выражениях
  • preg_replace() — Выполняет поиск и замену по регулярному выражению
  • preg_last_error() — Возвращает код ошибки выполнения последнего регулярного выражения PCRE
  • Анонимные функции

Источник

Оцените статью