PHP 7.1.12 Released

preg_replace_callback_array

(PHP 7)

preg_replace_callback_arrayPerform a regular expression search and replace using callbacks

Descrição

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

The behavior of this function is similar to preg_replace_callback(), except that callbacks are executed on a per-pattern basis.

Parâmetros

patterns_and_callbacks

An associative array mapping patterns (keys) to callbacks (values).

subject

The string or an array with strings to search and replace.

limit

The maximum possible replacements for each pattern in each subject string. Defaults to -1 (no limit).

count

If specified, this variable will be filled with the number of replacements done.

Valor Retornado

preg_replace_callback_array() returns an array if the subject parameter is an array, or a string otherwise. On errors the return value is NULL

If matches are found, the new subject will be returned, otherwise subject will be returned unchanged.

Exemplos

Exemplo #1 preg_replace_callback_array() example

<?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
);
?>

O exemplo acima irá imprimir:

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

Veja Também

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