regex — PHP preg_replace добавить скобки

У меня есть строка, как это:

xxx - 12, ABC DEF GHI

Я хочу заменить эту строку следующим образом

xxx - 12, (ABC DEF GHI)

Кроме того, строка, которую я добавил в скобки, является динамической.

Формат такой:

STRING - NUMBER, STRING

Скобки начинаются после NUMBER, строка найдена и заканчивается в конце строки.
Так что заменить шаблон

STRING - NUMBER, (STRING)

0

Решение

сделайте ваш шаблон и замену так:

$str = "xxx - 12, ABC DEF GHI";
$pattern = "/([A-Z]+ - [0-9]+,) ([A-Z\s]+)/i";
$replace = "$1 ($2)";
echo preg_replace($pattern,$replace,$str);

демонстрация

1

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

Ты можешь попробовать:

$str = preg_replace('~\d,\h*\K.*\S~', '($0)', $str);

детали шаблона:

~         # pattern delimiter
\d,       # a digit followed by a comma
\h*       # zero or more horizontal whitespaces
\K        # start the match result at this position
.* \S     # zero or more characters until the last non-whitespace character
~

В строке замены $0 относится ко всему матчу, но так как я использовал \K в шаблоне все совпадение — это только часть, соответствующая .*\S,

Не стесняйтесь описать, что происходит перед цифрой и запятой, если это необходимо.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector