Как заменить повторяющуюся пунктуацию в PHP с помощью регулярных выражений?

Скажем, у меня есть это

Hello ??? WHERE ARE YOU!!!! Comon ?!?!?!
desired outout
Hello ? WHERE ARE YOU!!!! Comon ?!

Как мне этого добиться? Я старался preg_replace_callback но не к счастью. я использовал Нахождение кратчайшего повторяющегося шаблона в строке в качестве отправной точки, но он работает над полным предложением, мне нужно, чтобы он работал над словом за словом + мне нужно удалить только дублирующиеся вычисления (шаблоны)? Живой код

0

Решение

Используйте код ниже:

$str = "Hello ??? WHERE ARE YOU!!!! Comon ?!?!?! ...";

$replacement = [
'?',
'?!',
'.',
];

foreach( $replacement as $key => $value ){
$pattern[$key] = sprintf("/(\%s)+/", $value);
}

echo $outout = preg_replace($pattern, $replacement, $str);

Вставьте любую пунктуацию в массив замены, чтобы удалить повторяющиеся знаки препинания.

0

Другие решения

замещать \?+ с ?, !+ с !, (\?!)+ с ?!, и так далее.

function dedup_punctuation($str) {
$targets      = array('/\?+/', '/!+/', '/(\?!)+/');
$replacements = array('?'    , '!'   , '?!'      );
return preg_replace($targets, $replacements, $str);
}
0

По вопросам рекламы [email protected]