Замена последовательности в строке ее индексом соответствия - PullRequest
3 голосов
/ 21 декабря 2010

В PHP, если я заменяю «a» в строке «abababc», как мне заставить его заменить на индекс совпадения (то есть «1 b 2 b 3 bc»)?

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

используйте preg_replace_callback вместо.

Пример PHP 5.3.0 (не тестировался):

$i = 0;
preg_replace_callback("/a/", function( $match ) {
    global $i;
    return ++$i;
}, "a b a b a b c");
2 голосов
/ 19 февраля 2012
$str = 'a b a ba a';
$count = 1;
while(($letter_pos = strpos($str, 'a')) !== false) {
    $str = substr_replace($str, $count++, $letter_pos, 1);
}
2 голосов
/ 21 декабря 2010

Вы уверены, что вам нужен preg _ *?

Вот как я бы это сделал:

$numerals = range(1, 10);
$str = str_replace('a', $numerals, $str);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...