Страницы

Поиск по вопросам

вторник, 8 января 2019 г.

Убрать второй или третий знак '!' в строке с помощью регулярного выражения. PHP

Всем привет! Есть строка$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!

Комментариев нет:

Отправить комментарий