Я пытаюсь сопоставить внутренние ссылки на форуме SMF и преобразовать тег BBC из URL-адреса в iurl, чтобы такая ссылка:
[url=https://www.translatum.gr/forum/index.php?topic=989144.0]κατ' ἐπιταγήν -> by way of command[/url]
Станет :
[iurl=https://www.translatum.gr/forum/index.php?topic=989144.0]κατ' ἐπιταγήν -> by way of command[/iurl]
Я пробовал что-то подобное на PhpMyAdmin (используя MariaDB 10.3)
UPDATE smf_messages SET body = REGEXP_REPLACE(body, '(\[url=https://www\.translatum\.gr)(.*?)(\[/url\])', '[iurl=https://www.translatum.gr\\2[/iurl]') WHERE ID_TOPIC = 987873
который, хотя и работает на тесте в regex101 , выдает мусорный вывод на SQL (т.е. он заменяется несколькими итерациями ссылки и ее текста). Я использовал это для справки по синтаксису
Вам нужно дважды экранировать обратную косую черту в строковом литерале, чтобы фактически определить литеральную обратную косую черту char, которая образует escape-последовательности регулярных выражений.
Кроме того, ваша замена регулярному выражению слишком избыточна, вы можете захватить больше текста и сделать замену еще короче:
REGEXP_REPLACE(body, '\\[(url=https://www\\.translatum\\.gr.*?)\\[/url]', '[i\\1[/iurl]')
См. эту демонстрацию регулярных выражений.
Вау, удивительно, несколько побегов сбивают меня с толку :) Жаль, что regex101 не имеет разновидности MySQL.