Полезные регулярные выражения

Регулярные выражения помогают нам быстро находить различные ошибки в коде сайта.

Хочется сказать, что написать совершенный паттэрн, наверное, невозможно. Совершенный паттэрн должен был бы в один приём уметь:

  • Обнаруживать двойное использование атрибутов тэга
  • Определять пропущенные обязательные атрибуты
  • Определять неверный формат тэга, например использование двойных кавычек внутри атрибута без экранирования
  • Проверять тэги без пробелов между атрибутами
  • Корректно определять атрибут на нестандартном месте, например <a title="blabla" href="blabla.htm">
  • и др.

В итоге нам приходится делать 5-20 проверок базы данных целого сайта по разным паттэрнам в поисках ошибок.

  • \<a\shref\=\"[^"]+\"\> - Поиск ссылок без тэга title.
  • \<img\s(src\=\"[^"]*\")+\s?((alt\=\"[^"]*\")+|(title\=\"[^"]*\")+)?\s*\/?\> - Поиск изображений либо вообще без тэгов alt,title, либо без одного из этих тэгов.

Разбираем тему по кусочкам

ПаттернЧто обозначаетПример
\<img(?=[^>]*src)(?=[^>]*title\=\"|alt\=\").*?\>Картинка, включающая и title и alt, а также возможны любые другие атрибуты<img src="#" alt="asdas" title="wqeeq" class="qwewqe" />
\<(?:img|a)[^\>]+?(?=(alt|title)\=\"[^\>]+\1\=\").*?\>Ищем картинку или ссылку с повторяющимися атрибутами<img src="#" title="атрибут тайтл" title="он же ещё раз" alt="qew">
^(.+)\1$Удаляет повторяющиеся слова в одной строке. Например, IP&IIP&I, в итоге должно остаться IP&I. \1 Означает вхождение первого найденного паттерна.Не забываем в результат поставить $1
^(.+)\1(\d.*)$Удаляет один из дублей в строке, если в конце есть например цифра и разная фигня.Не забываем в результат поставить $1$2
Яндекс.Метрика