REGEXP_REPLACE руководство - PullRequest
7 голосов
/ 07 марта 2019

Я пытался массово удалить спам-ссылки из сообщений в Wordpress оптом, как показано ниже:

<a style="text-decoration: none" href="/price-of-xenical-at-pharmacy">.</a>

Они находятся в таблице wp_posts под столбцом post_content. Я пытался сделать это с помощью подстановочного знака добавления% в теге href, потому что все URL разные, но якорь (точка остановки) и встроенный стиль одинаковы.

UPDATE wp_posts
SET post_content = REPLACE (post_content,
    '<a style="text-decoration:none" href="%">.</a>',
    '.');

С тех пор мне сказали, что SQL не поддерживает то, что я пытаюсь сделать (или, по крайней мере, способ, которым я это делаю).

Я использую MariaDB, которая, по-видимому, поддерживает REGEXP_REPLACE , поэтому я ищу несколько советов о том, что SQL Query и REGEX мне нужно было бы массово удалить эти ссылки, но оставить все остальное содержимое без изменений.

Любая помощь с благодарностью. Цель состоит в том, чтобы удалить вышеуказанные строки или заменить пробел

UPDATE

Пример содержимого публикации, последняя ссылка - тип, который мне нужно удалить. :

    <h2>Warranty</h2>
<span style="font-size: small"> </span>

<span style="font-size: small">Lorem ipsum dolor sit amet, non risus bibendum quis morbi, duis elit porttitor semper, ante augue at consectetuer elit lectus est, nascetur neque consequuntur donec turpis. Cursus ullamcorper posuere massa interdum, rhoncus blandit, vitae in etiam justo lectus eu fames. Dolor quam dicta wisi class duis. Eleifend sagittis, scelerisque convallis consectetuer sed non aptent. Velit tristique vulputate proin, ipsum diam aliquam. Nibh sit vitae et m</span>

&nbsp;

<a href="https://www.example.com/wp-content/image.jpg"><img class="alignright size-full wp-image-56" title="image" src="https://www.example.com/wp-content/image.jpg" alt="image" width="280" height="280" /></a><a style="text-decoration: none" href="/price-of-xenical-at-pharmacy">.</a>

1 Ответ

4 голосов
/ 07 марта 2019

Если вы хотите удалить все теги привязки, но сохранить текст, заключенный в теги, попробуйте использовать этот шаблон:

<a[^>]*>(.*?)</a>

Затем замените только первой группой захвата. О шаблоне говорить нечего, кроме того, что мы используем (.*?) для захвата содержимого между тегами привязки. Значение .*? является значительным и указывает механизму регулярных выражений останавливаться на закрывающем теге first . В противном случае, если бы мы просто использовали (.*), он мог бы потреблять несколько тегов привязки, если они существуют в вашем столбце.

SELECT
    REGEXP_REPLACE('<a style="text-decoration:none" href="[^"]*">BLAH</a>',
        '<a[^>]*>(.*?)</a>', '$1');

Приведенный выше запрос выводит BLAH.

Если вместо этого вы хотите просто удалить все теги привязки, используйте это:

SELECT
    REGEXP_REPLACE('<a style="text-decoration:none" href="[^"]*">BLAH</a>',
        '<a[^>]*>(.*?)</a>', '');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...