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 — обратная ссылка на значение первой подмаски.

→ Ссылка