Всем привет!
Есть строка$string = aaa!bbbb!ccccc!ddddd!eeeeee!ffffff!gggg!...и до бесконечности
Мне нужно составить регулярное выражение, меняющее произвольный восклицательный знак на X.
Повторений восклицательных знаков через n-e количество символов может быть хоть миллион, поэтому такие варианты:
preg_replace('/^[^!]+/i', 'X', $string); //меняем первый по счету
preg_replace('/^([^!]+)(!)([^!])/i', 'X', $string); //меняем второй по счету
preg_replace('/^([^!]+)(!)([^!])(!)([^!])/i', 'X', $string); //меняем третий по счету...
...не подходят
Подскажите, как сделать такой паттерн(регулярное выражение на выборку), чтобы сменой одной цифры выбирать какой ! менять. Грубо говоря: поставил где-то 1, поменялся первый, поставил 2, поменялся второй и т.д.
Спасибо!
Ответ
$text = "aaa!bbbb!ccccc!ddddd!eeeeee!ffffff!gggg!";
$number = 2;
$replace = preg_replace ('/!/e',"\$number--==1?'X':'\\0'", $text);
echo $replace;
И с callback для желающих -.-
$text = "aaa!bbbb!ccccc!ddddd!eeeeee!ffffff!gggg!";
$number = 3;
$replace = preg_replace_callback('/!/',
function ($match) use (&$number) {return $number--==1?'X':$match[0];},
$text);
echo $replace;
Результат:
aaa!bbbb!cccccXddddd!eeeeee!ffffff!gggg!
Комментариев нет:
Отправить комментарий