#regex #shell #grep
#регулярное выражение #оболочка #grep
Вопрос:
Привет, у меня есть html-файл с несколькими тегами img:
<img src="https://www.pokeyplay.com/imagenes/backend/publicidad.gif" alt="Publicidad" align="left" />
<img src="https://www.pokeyplay.com/imagenes/backend/spacer.gif" alt="sp" />
<img src="imagenes/backend/etiqueta-pyp-pokedex.gif" alt="Pamp;amp;P Pokamp;eacute;Dex" width="184" height="100" />
<img src="imagenes/backend/spacer.gif" alt="sp" />
<img src="http://urpgstatic.com/img_library/pokemon_sprites/187.png" style="vertical-align:middle" />
Чтобы упорядочить все теги img, я использую следующее регулярное выражение:
'<img[^>]* src="([^"]*)"[^>]*>'
Но я хочу извлечь только все теги IMG из urpgstatic.com
Как это можно сделать?
Я сделал несколько попыток, подобных этому:
<img.*?src="(http[s]?://)urpgstatic.com?([^/s] /)(.*)[png]$"[^>] >
Спасибо
Комментарии:
1. Предлагаю вам использовать анализатор HTML
2. Спасибо, но я ищу решение оболочки с регулярным выражением.
Ответ №1:
Попробуйте это
<img[^>]*(?="https?://(www.)?urpgstatic.com)"([^"]*)"[^>]*>
Кроме того, это будет работать с grep
grep -iP '<img[^>]*(?="https?://(www.)?urpgstatic.com)"([^"]*)"[^>]*>' index.html
Комментарии:
1. Это работает, но по какой-либо причине это не работает с grep.
Ответ №2:
Вы можете использовать эту grep
команду:
grep -ioE '<img [^>]*src="https?://(www.)?urpgstatic.com/[^>]*>' file.html
<img src="http://urpgstatic.com/img_library/pokemon_sprites/187.png" style="vertical-align:middle" />
Хотя, пожалуйста, помните, что синтаксический анализ HTML с использованием регулярных выражений может быть подвержен ошибкам, а использование синтаксического анализатора HTML, такого как DOM
в php, более надежно.
Подробности регулярного выражения:
<img [^>]*src=
: Сопоставление<img <anything-except->src=
текста- «https?: //
: Match
http: //or
https://` (www.)?urpgstatic.com/
: Сопоставление необязательноwww.
, за которым следуетurpgstatic.com/
Комментарии:
1. Это не работает, я хочу извлечь весь HTML-тег, нет до src.
2. кстати, он ищет только заданный шаблон, но выводит полный
<img ..>
тег.3. Если вы хотите использовать
-o
флаг, пожалуйста, проверьте обновленный ответ.