Ответ 1
Вам нужно много бежать:
REGEXP_REPLACE(message, "\\[quote\\sauthor=(.+)\\slink=[^\\]]+]", "\\[quote=\"\\1\"\\]")
Обратите внимание, что вам необходимо ссылаться на группу \\1
Мне нужно запустить regex find-and-replace в столбце с именем message
в таблице MySQL с именем post
.
В моей базе данных работает MariaDB 10.
В соответствии с docs, MariaDB 10 имеет новую функцию REGEXP_REPLACE
, предназначенную для выполнения именно этого, но я не могу показаться из фактического синтаксиса.
Это затронет 280 000 строк, поэтому в идеале также можно ограничить его только изменением одной определенной строки за раз, пока я ее тестирую, или просто сделать SELECT
, а не UPDATE
я уверен, что он делает то, что я хочу.
Я хочу запустить регулярное выражение:
\[quote\sauthor=(.+)\slink=[^\]]+]
Сменная строка:
[quote="$1"]
Следующее было тем, что я пробовал, но он просто вызывает ошибку SQL:
UPDATE post SET message = REGEXP_REPLACE(message, '\[quote\sauthor=(.+)\slink=[^\]]+]', '[quote="$1"]') WHERE post_id = 12
В этом случае исходное сообщение было:
[quote author=Jon_doe link=board=2;threadid=125;start=40#msg1206 date=1065088]
, и конечный результат должен быть [quote="Jon_doe"]
Каков правильный синтаксис для работы этого REGEXP_REPLACE
?
Вам нужно много бежать:
REGEXP_REPLACE(message, "\\[quote\\sauthor=(.+)\\slink=[^\\]]+]", "\\[quote=\"\\1\"\\]")
Обратите внимание, что вам необходимо ссылаться на группу \\1