logo помогаю бизнесу зарабатывать больше.
Связаться
Введите название услуги:

Замена разных строк используя регулярные выражения в MySQL

2 июня 2025 в 12:48 MyPhpAdmin

Для замены текста по регулярному выражению в базе данных 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;amp;lt;?php
// Подключаем WordPress ядро (если нужно вручную, например, в отдельном PHP-скрипте)
require_once( dirname(__FILE__) . ‘/wp-load.php’ );

// Получаем все посты, где содержится нужная строка
global $wpdb;
$posts = $wpdb-&amp;amp;gt;get_results("
SELECT ID, post_content
FROM {$wpdb-&amp;amp;gt;prefix}posts
WHERE post_content LIKE ‘%Адрес службы (ДДД)%’
");

foreach ($posts as $post) {
$original = $post-&amp;amp;gt;post_content;

// Регулярное выражение: заменяем строку с адресом
$updated = preg_replace(
‘#&amp;amp;lt;li&amp;amp;gt;Адрес службы \(ДДД\).*?&amp;amp;lt;/li&amp;amp;gt;#u’,
‘&amp;amp;lt;li&amp;amp;gt;Адрес службы (ДДД)&amp;amp;lt;/li&amp;amp;gt;’,
$original
);

// Если есть изменения — обновляем пост
if ($original !== $updated) {
$wpdb-&amp;amp;gt;update(
"{$wpdb-&amp;amp;gt;prefix}posts",
[‘post_content’ =&amp;amp;gt; $updated],
[‘ID’ =&amp;amp;gt; $post-&amp;amp;gt;ID],
[‘%s’],
[‘%d’]
);
echo "Обновлён пост ID {$post-&amp;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, нужен для кириллицы.

Похожие статьи

Оставить заявку
По любым вопросам пишите мне в мессенджеры .
Написать в WhatsApp
+7 (925) 444-48-89
Написать в Telegram
@max_webs
Ваша цена
Предложите свою цена за товар или услугу. Пишите мне в мессенджеры или оставьте заявку в данной форме.
Написать в WhatsApp
+7 (925) 444-48-89
Написать в Telegram
@max_webs
[contact-form-7 id="22192" title="Универсальная форма"]
[contact-form-7 id="114828" title="Рассчитать стоимость"]