Для замены текста по регулярному выражению в базе данных MySQL, например удаления переменной части из строки вида:
Содержание
[html]
<ul>
<li>Адрес службы (ДДД) РАЗНЫЕ АДРЕСА</li>
</ul>
[/html]
на:
[html]
<ul>
<li>Адрес службы (ДДД)</li>
</ul>
[/html]
можно использовать функцию REGEXP_REPLACE() (доступна в MySQL 8.0+).
[html]
UPDATE your_table
SET your_column = REGEXP_REPLACE(your_column, ‘<li>Адрес службы \\(ДДД\\).*?</li>’, ‘<li>Адрес службы (ДДД)</li>’)
WHERE your_column REGEXP ‘<li>Адрес службы \\(ДДД\\).*?</li>’;
[/html]
Объяснение:
-
REGEXP_REPLACE(your_column, '...', '...'): заменяет всё, что совпадает с регулярным выражением. -
\\(ДДД\\)— экранируем скобки. -
.*?— находит любую последовательность символов (нежадно), то есть “РАЗНЫЕ АДРЕСА”. -
Условие в
WHERE— чтобы обновлять только строки, где есть совпадение.
Если REGEXP_REPLACE() не поддерживается (например, версия < 8.0):
Тогда можно использовать REPLACE() в комбинации с SUBSTRING_INDEX(), но это менее гибко. Лучше обновить MySQL или использовать регулярные выражения на уровне приложения (например, в Python, PHP и т.п.).
Готовый код для WordPress (однократно выполнить)
✅ Заменяет строку <li>Адрес службы (ДДД) ...</li> на <li>Адрес службы (ДДД)</li> в post_content:
[php]&amp;lt;?php
// Подключаем WordPress ядро (если нужно вручную, например, в отдельном PHP-скрипте)
require_once( dirname(__FILE__) . ‘/wp-load.php’ );
// Получаем все посты, где содержится нужная строка
global $wpdb;
$posts = $wpdb-&amp;gt;get_results("
SELECT ID, post_content
FROM {$wpdb-&amp;gt;prefix}posts
WHERE post_content LIKE ‘%Адрес службы (ДДД)%’
");
foreach ($posts as $post) {
$original = $post-&amp;gt;post_content;
// Регулярное выражение: заменяем строку с адресом
$updated = preg_replace(
‘#&amp;lt;li&amp;gt;Адрес службы \(ДДД\).*?&amp;lt;/li&amp;gt;#u’,
‘&amp;lt;li&amp;gt;Адрес службы (ДДД)&amp;lt;/li&amp;gt;’,
$original
);
// Если есть изменения — обновляем пост
if ($original !== $updated) {
$wpdb-&amp;gt;update(
"{$wpdb-&amp;gt;prefix}posts",
[‘post_content’ =&amp;gt; $updated],
[‘ID’ =&amp;gt; $post-&amp;gt;ID],
[‘%s’],
[‘%d’]
);
echo "Обновлён пост ID {$post-&amp;gt;ID}\n";
}
}
[/php]
Объяснение
[php]
$updated = preg_replace(
‘#<li>Адрес службы \(ДДД\).*?</li>#u’, // ← ЭТО — ЧТО ИЩЕМ (регулярное выражение)
‘<li>Адрес службы (ДДД)</li>’, // ← ЭТО — НА ЧТО МЕНЯЕМ
$original // ← ЭТО — ГДЕ ИЩЕМ (текущий текст поста)
);
[/php]
Что ищем?
[php]
#<li>Адрес службы \(ДДД\).*?</li>#u
[/php]
-
#...#— разделители регулярного выражения. -
<li>Адрес службы \(ДДД\)— начало строки, которую мы хотим оставить.-
Скобки экранированы:
\(и\), так как это специальные символы в regex.
-
-
.*?— означает: «захвати всё, что идёт после, до закрывающего</li>».-
Это и есть “РАЗНЫЕ АДРЕСА”, которые мы хотим удалить.
-
-
</li>— закрывающий тег списка. -
u— модификатор Unicode, нужен для кириллицы.





