У меня есть строка, как это:
xxx - 12, ABC DEF GHI
Я хочу заменить эту строку следующим образом
xxx - 12, (ABC DEF GHI)
Кроме того, строка, которую я добавил в скобки, является динамической.
Формат такой:
STRING - NUMBER, STRING
Скобки начинаются после NUMBER,
строка найдена и заканчивается в конце строки.
Так что заменить шаблон
STRING - NUMBER, (STRING)
сделайте ваш шаблон и замену так:
$str = "xxx - 12, ABC DEF GHI";
$pattern = "/([A-Z]+ - [0-9]+,) ([A-Z\s]+)/i";
$replace = "$1 ($2)";
echo preg_replace($pattern,$replace,$str);
Ты можешь попробовать:
$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
,
Не стесняйтесь описать, что происходит перед цифрой и запятой, если это необходимо.