Поиск и замена по регулярному выражению
Сегодня мне потребовалось в вордпрессе обрамить все ютуб-ссылки шорткодом [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 обновит все ютуб-ссылки за пару секунд.