Как я могу исправить это регулярное выражение, чтобы получать html-тег только с определенного URL?

#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 флаг, пожалуйста, проверьте обновленный ответ.