Поиск и замена по регулярному выражению

Сегодня мне потребовалось в вордпрессе обрамить все ютуб-ссылки шорткодом [embed] для нормального отображения на странице. А так как страниц было много, то самый разумный вариант решить задачу — сделать это автоматически. Вот только sql-запрос в качестве решения не подошёл, так как напрямую не позволяет работать с регулярными выражениями. А в случае с ютуб-ссылками нужны именно они.

На помощь пришёл текстовый редактор с функцией поиска и замены по регулярному выражению. Так что держите инструкцию по использованию этой классной опцией.

Предисловие

Чтобы работать с базой из текстового редактора, я предварительно сдампил таблицу _posts с опцией DROP IF EXISTS для последующей замены данных. Далее открыл sql-файл в редакторе — я использую Atom, поэтому инструкцию в первую очередь для него.

Подготовка регулярного выражения

Первым делом нужно понять, что искать. В данном конкретном случае это ссылки на ютуб видео, все они имеют одинаковое начало и отличаются значением параметра v. Формат ссылки следующего вида: https://www.youtube.com/watch?v=aaaAAAaaa123. В параметре v могут передаваться латинские буквы в верхнем и нижнем регистрах, цифры, а также символы _ и -. Количество символов может отличаться. Получаем следующую регулярку: https://www.youtube.com/watch\?v=([a-zA-Z0-9-_]+).

Проверка

Чтобы перейти в режим поиска по регулярному выражению в атоме, достаточно нажать Ctrl + F (либо из меню выбрать «Поиск»), затем нажать на кнопку с точкой и звёздочкой, что включит режим регулярок. В поле для поиска прописываем регулярку и запускаем поиск. Я проверил на своём файле — нашлось больше 1500 вхождений. Вручную такое количество обработать было бы крайне тяжело)

Замена

В регулярных выражениях есть вхождения, обозначающие некий шаблон, а не строгое соответствие. Чтобы сохранить этот участок в строке на замену, нужно воспользоваться алиасами в виде знака $ и порядкового номера вхождения. Удобнее всего считать по скобкам, номера для них присваиваются по порядку, слева направо. Соответственно для ютуба получается следующий набор параметров:

найти: https://www.youtube.com/watch\?v=([a-zA-Z0-9_-]+)
заменить: [embed]https://www.youtube.com/watch?v=$1[embed]

Далее можно первые несколько замен проделать в одиночном режиме, просматривая результат на корректность. Если всё в порядке и ошибок нет, то нажатие Replace All обновит все ютуб-ссылки за пару секунд.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.