У меня есть блог Wordpress с базой данных mysql. Недавно мне пришлось изменить плагин, предназначенный для форматирования кода, и в результате я столкнулся с перспективой замены подстроки в нескольких строках в определенном поле другой подстрокой.

Текст поиска: <pre class="lang:default decode:true ">

Текст, который его заменяет: [code]

Столбец (поле), которое содержит подстроку: post_content

В настоящее время я использую phpmyadmin, чтобы найти текст, экспортировать все строки в дамп sql, выполнить sed для файла дампа и повторно импортировать его. Подстрока является частью большей строки (по определению), другие элементы строки не должны нарушаться.

Я хотел бы узнать, как это сделать с помощью mysql, не работая с дампом.

Попробовав решение Мзеделера, я обнаружил, что некоторые выражения содержат <pre class="lang:default decode:true"> вместо <pre class="lang:default decode:true "> (один с лишним пробелом после истины). Как я могу выполнить поиск по регулярному выражению, а затем заменить его на предполагаемую строку?

1
Joel G Mathew 27 Июн 2013 в 22:43

1 ответ

Лучший ответ
UPDATE <my table>
   SET post_content = REPLACE(
       post_content,
       '<pre class="lang:default decode:true ">',
       '[code]'
   )
2
mzedeler 27 Июн 2013 в 23:08
Если бы я хотел заменить как <pre class="lang:default decode:true ">, так и <pre class="lang:default decode:true">, как бы я поступил? В первом выражении после «истины» есть лишний пробел. Как мне добавить сопоставление регулярного выражения для этого sql-запроса?
 – 
Joel G Mathew
27 Июн 2013 в 23:44
К сожалению, в MySQL нет функции, которая выполняет замену на основе регулярных выражений. Если вы знаете, что эти два варианта единственные, вы можете просто запустить два обновления. В противном случае я считаю, что ваше решение с использованием sed, скорее всего, будет самым простым.
 – 
mzedeler
28 Июн 2013 в 00:34
Спасибо. К счастью, было всего три незначительных варианта поискового текста. Ваше решение работает правильно.
 – 
Joel G Mathew
28 Июн 2013 в 00:36