Регулярные выражения: сопоставить все атрибуты alt в файле HTML? - PullRequest
0 голосов
/ 04 ноября 2011

Я просматривал вопросы и получил лучшее представление о своей проблеме, но все же не нашел ответа.

У меня проблема с регулярными выражениями в PHP.Я пытаюсь получить весь текст в атрибутах "alt" HTML-файла.Я принимаю во внимание все возможные имена тегов (img, input и area) и все возможные варианты, такие как пробелы и разрывы строк между символами (например, <img alt = "Hello">).Также следует помнить, что строка соответствия может быть заключена в одинарные или двойные кавычки и содержать другие (разные) кавычки, например: <img alt="Alan's picture"> или, <img alt='Example for the word "hello" in the text'>.

. Это становится трудноя (я новичок с регулярными выражениями), так что я просто покажу вам, что я получил.Обратите внимание, что я пытаюсь использовать обратную ссылку внутри класса символов, что я считаю неправильной практикой (или я так думаю).

'/<\s*(?:img|input|area)\s[^>]*alt\s*=\s*("|\')([^\1>]*)\1[^>]*>/siU'

Я также виделв StackOverflow некоторые люди рекомендуют анализаторы HTML для подобных вещей, но меня беспокоит, сколько ресурсов может потреблять эта практика.Вы думаете, что это лучшая идея?Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Использование синтаксического анализатора - определенно правильный путь.

Regex крайне не подходит для задач такого типа, и даже Джон Скит не может анализировать HTML с помощью регулярных выражений

0 голосов
/ 04 ноября 2011

Абсолютно вы должны использовать парсер.Для этого есть несколько причин:

  • Библиотека синтаксического анализатора HTML может учитывать неработающий (или иным образом искаженный) HTML, который будет отсутствовать в регулярном выражении;например, на некоторых веб-страницах не будет экранированных кавычек, встроенных в атрибут alt, таких как alt='why can't I do this'
  • . Парсеры смогут обрабатывать экранированные символы автоматически;например, alt="why&#32;the&#32;long&#32;space"
  • Кроме того, вероятно, что синтаксический анализатор HTML предложит скорость и преимущества API

Возможно, вы можете проверить вопрос StackOverflow Надежный, зрелый HTMLParser for PHP с некоторыми советами о том, какие парсеры целесообразно использовать.

...