PHP.mk документација

preg_replace_callback_array

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.preg-replace-callback-array.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.preg-replace-callback-array.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
preg_replace_callback_array

Референца за `function.preg-replace-callback-array.php` со подобрена типографија и навигација.

function.preg-replace-callback-array.php

preg_replace_callback_array

Интерфејсот SessionUpdateTimestampHandlerInterface

preg_replace_callback_arrayИзврши пребарување и замена со регуларен израз со користење на повици

= NULL

preg_replace_callback_array(
         array $pattern,
         string|array $subject,
         int $limit = -1,
         int &$count = null,
         int $flags = 0
): string|array|null

Поведението на оваа функција е слично на preg_replace_callback(), освен што повиците се извршуваат на база на секој шаблон.

Параметри

pattern

Асоцијативен список што ги мапира шаблоните (клучеви) на callable(вредности).

subject

Низата или низа со низи за пребарување и замена.

limit

Максимални можни замени за секоја шема во секоја subject низа. Стандардно е -1 (нема ограничување).

count

Ако е специфицирано, оваа променлива ќе биде пополнета со бројот на извршени замени.

flags

flags може да биде комбинација од PREG_OFFSET_CAPTURE and PREG_UNMATCHED_AS_NULL знаменца, кои влијаат на форматот на низата за совпаѓања. Погледнете го описот во preg_match() за повеќе детали.

Вратени вредности

preg_replace_callback_array() враќа низа ако subject параметарот е низа, или стринг инаку. При грешки, вратената вредност е null

Ако се најдат совпаѓања, ќе се врати новиот предмет, инаку subject ќе се врати непроменет.

Errors/Exceptions

Ако дадениот регуларен израз не може да се состави во валиден регуларен израз, еден E_WARNING се емитува.

Дневник на промени

Верзија = NULL
7.4.0 На flags параметар беше додаден.

Примери

Пример #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
);
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

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

Види Исто така

Белешки од корисници 4 белешки

Sz.
пред 8 години
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.)

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.)
drevilkuko at gmail dot com
пред 10 години
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
        );
?>
claus at tondering dot dk
пред 1 година
Note that the first replacement is applied to the whole string before the next replacement is applied.

For example:

<?php
$subject = 'a b a b a b';

preg_replace_callback_array(
    [
        '/a/' => function ($match) {
            echo '"a" found', PHP_EOL;
        },
        '/b/' => function ($match) {
            echo '"b" found', PHP_EOL;
        }
    ],
    $subject
);

?>

will print

"a" found
"a" found
"a" found
"b" found
"b" found
"b" found

This means that you cannot use global variables to communicate information between the functions about what point in the string you have reached.
jfcherng at NOSPAM dot gmail dot com
пред 10 години
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;
}

// }

?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.