Удаление ссылок по регулярному выражению
Мне нужно удалить ссылки ввида |yadi.sk/d/nWUe0X9bHukZf|. они меняются. Общее только yadi.sk/d оставив ||
Ответы (1 шт):
А я не понимаю, причем здесь регулярные выражения.
По моему, довольно простое SQL выражение DELETE FROM url_table WHERE url LIKE 'https://yadi.sk/d/%' ; вполне решает проблему.
Здесь мы используем оператор LIKE и выражение, в котором начало фиксировано https://yadi.sk/d/, а за этим фиксированным началом может идти что угодно, о чем нам говорит оператор %.
Это, если угодно, "регулярные выражения для бедных" в самом SQL. Нет, даже не так: для совсем бедных.
Тем не менее, задачу это вполне себе решает.
Дополнение
В комментарии автор вопроса прислал картинку с php my admin'ом.
На этой картинке видно, как я понимаю,
- что таблица называется dle_post
- что вопрос сформулирова неверно: автору надо не удалить строки, которые содержат ссылку на я-диск, а проапдейтить строки, так, чтобы ссылки в этой строке не стало.
То есть: было мусор - мусор - мусор |я-диcк| - мусор2 - мусор3 и т.п., а стало просто мусор - мусор - мусор || - мусор2 - мусор3 и т.п.
- что поле в таблице dle_post, котрое надо апдейтить, называется xfields
Если всё это - верно, то алгоритм такой:
запросом SELECT * FROM dle_post WHERE xfields LIKE '%|https://yadi.sk/d/%|%' находим строки.
анализируем поле xfields, чтобы понять, где в нём начинается ссылка. В SQL это делается выражением POSITION("|https://yadi.sk/d/" in xfields)
теперь надо найти конец ссылки - ведь она, как я понял, не фиксированной длинны. Это делается той же POSITION, только искать надо правый ограничитель "|".
вот теперь есть 2 позиции: начало и конец ссылки. Теперь её можно вырезать, воспользовавшись SUBSTR и склеиванием строк.
и наконец, надо выполнить UPDATE.
Алгоритм я написал, теперь его надо превратить в одно, хоть и сложное, выражени ена SQL. Ну - тут вам и карты... то есть, google в руки.
Или - можно примерно так же написать это на PHP, если это для вас привычно. Алгоритм тото же, просто что то может быть попроще.