Mysql PREG_REPLACE нужно заменить вхождение между двумя строками
Есть строка в базе "lorem ipsum **sit amit** " Мне нужно заменить вхождение между символами ** на него же с исправлениями
Вот что я пытаюсь сделать
"**sit amit**" => "<tag>sit amit</tag>"
UPDATE test_table SET field = REGEXP_REPLACE(field,'[\*\*(.*?)\*\*]', 'что здесь?');
запрос заменяет каждый символ звездочки на новую строку, мне же нужно ** => <tag>
Ответы (2 шт):
Автор решения: John Nix
→ Ссылка
В документации не нашел описание групп, поэтому может это и не работает, но должно быть вроде:
REGEXP_REPLACE(field,'\*\*(.*?)\*\*', '<tag>$1</tag>');
Если не работает можно в два приема:
REGEXP_REPLACE(field,'^\*\*', '<tag>');
REGEXP_REPLACE(field,'\*\*$', '</tag>');
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте
REGEXP_REPLACE(field, '\\*\\*(.*?)\\*\\*', '<tag>$1</tag>');
Шаблон получается \*\*(.*?)\*\*:
\*\*-**(.*?)- Захватывающая подмаска №1: ноль и более символов, отличных от символов перехода на новую строку, как можно меньше\*\*-**
$1 — обратная ссылка на значение первой подмаски.