ScotlandPHP

preg_replace_callback_array

(PHP 7)

preg_replace_callback_arrayВыполняет поиск и замену по регулярному выражению с использованием функций обратного вызова

Описание

mixed preg_replace_callback_array ( array $patterns_and_callbacks , mixed $subject [, int $limit = -1 [, int &$count ]] )

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

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

patterns_and_callbacks

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

subject

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

limit

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

count

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

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

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

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

Примеры

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

<?php
$subject 
'Aaaaaa Bbb';

preg_replace_callback_array(
    [
        
'~[a]+~i' => function ($match) {
            echo 
strlen($match[0]), ' matches for "a" found'PHP_EOL;
        },
        
'~[b]+~i' => function ($match) {
            echo 
strlen($match[0]), ' matches for "b" found'PHP_EOL;
        }
    ],
    
$subject
);
?>

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

6 matches for "a" found
3 matches for "b" found

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

add a note add a note

User Contributed Notes 2 notes

up
7
drevilkuko at gmail dot com
1 year ago
finally!!!

before (<=php5.6):

<?php
        $htmlString
= preg_replace_callback(
           
'/(href="?)(\S+)("?)/i',
            function (&
$matches) {
                return
$matches[1] . urldecode($matches[2]) . $matches[3];
            },
           
$htmlString
       
);

       
$htmlString = preg_replace_callback(
           
'/(href="?\S+)(%24)(\S+)?"?/i', // %24 = $
           
function (&$matches) {
                return
urldecode($matches[1] . '$' . $matches[3]);
            },
           
$htmlString
       
);
?>

php7

<?php

        $htmlString
= preg_replace_callback_array(
            [
               
'/(href="?)(\S+)("?)/i' => function (&$matches) {
                    return
$matches[1] . urldecode($matches[2]) . $matches[3];
                },
               
'/(href="?\S+)(%24)(\S+)?"?/i' => function (&$matches) {
                    return
urldecode($matches[1] . '$' . $matches[3]);
                }
            ],
           
$htmlString
       
);
?>
up
1
jfcherng at NOSPAM dot gmail dot com
1 year ago
Here's a possible alternative in older PHP.

<?php

// if (!function_exists('preg_replace_callback_array')) {

function preg_replace_callback_array (array $patterns_and_callbacks, $subject, $limit=-1, &$count=NULL) {
   
$count = 0;
    foreach (
$patterns_and_callbacks as $pattern => &$callback) {
       
$subject = preg_replace_callback($pattern, $callback, $subject, $limit, $partial_count);
       
$count += $partial_count;
    }
    return
preg_last_error() == PREG_NO_ERROR ? $subject : NULL;
}

// }

?>
To Top