Вы можете использовать
$string="{1},[2],(3),<4>";
$what = ['~[{[<]~', '~[]}>]~'];
$with = ['(', ')'];
$string = preg_replace($what, $with, $string);
echo $string;
Здесь,
[{[<]
- класс символов соответствует одному из трех символов: {
, [
или <
[]}>]
- соответствует одному из трех символов: ]
, }
или >
(примечаниечто ]
внутри класса символов не нужно экранировать, когда он является первым символом в классе).
См. PHP демо .
Вы также можете использовать один вызов preg_replace_callback
:
$string = preg_replace_callback('~([{[<])|[]}>]~', function ($m) {
return !empty($m[1]) ? "(" : ")";
}, $string);
См. эту демонстрацию PHP .
Шаблон ([{[<])
фиксирует начальную пунктуацию вГруппа 1 ($m[1]
), и если группа не пуста после того, как найдено совпадение, возвращается (
, в противном случае )
заменяется на.