Вот код:
$string = "{1},[2],(3),<4>";
// Replaces closing square, curly, angle brackets with round brackets
$string = preg_replace('/\{\[\</', '(', $string);
$string = preg_replace('/\}\]\>/', ')', $string);
Он вообще не заменял в этой строке... Есть ли кодировка лучше этой?
Спасибо.






{[< никогда не встречается в вашей строке. Используйте класс символов или необязательную группировку.
$string = preg_replace('/[{[<]/', '(', $string);
$string = preg_replace('/[}>\]]/', ')', $string);
Альтернативный подход без класса символов:
$string = preg_replace('/(?:\{|<|\[)/', '(', $string);
$string = preg_replace('/(?:\}|>|\])/', ')', $string);
(?:\{|<|\[) гораздо менее эффективен, чем класс символов [{<[].
Это должно быть выполнено одним вызовом preg_replace(), как показал Виктор.
Вы можете использовать
$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]), и если группа не пуста после того, как найдено совпадение, возвращается (, иначе ) заменяется на.
Если вы не используете регулярные выражения нужно, избегайте их. Это можно сделать простой заменой строки, например.
<?php
$string = "{1},[2],(3),<4>";
$string = strtr($string, ['{' => '(', '}' => ')', '[' => '(', ']' => ')', '<' => '(', '>' => ')']);
Здесь нет необходимости в регулярном выражении:
$string = str_replace(['{','[','<'], '(', str_replace(['}',']','>'], ')', $string));
Или используйте один вызов strtr, но массив будет длиннее.
комментарий в коде должен быть: // Заменяет квадратные, фигурные, угловые скобки круглыми скобками