Не жадные регулярные выражения, но не содержат строки - PullRequest
2 голосов
/ 04 апреля 2019

Я пытаюсь извлечь определенные URL-адреса из HTML (например, все, которые начинаются с http, содержат / tempfiles / и заканчиваются на .jpg). У меня есть что-то вроде;

http.*?\/tempfiles\/.*?\.jpg

Проблема в том, когда у меня есть HTML как;

blah blah <img src=http://somelink/file.html>http://server/tempfiles/blah.jpg
blah blah

Возвращает http://somelink/file.html etc more junk http://server/tempfiles/blah.jpg

Есть ли способ сказать, что не должно быть второго http между первым и / tempfiles /?

1 Ответ

2 голосов
/ 05 апреля 2019

Вы можете использовать

http(?:(?!http).)*?/tempfiles/.*?\.jpg

См. Демонстрационный пример regex и график Regulex :

enter image description here

Детали

  • http - подстрока http
  • (?:(?!http).)*? - любой символ, кроме символа новой строки, 0 или более повторений, как можно меньше, который не запускает http последовательность символов
  • /tempfiles/ - буквальная подстрока
  • .*? - любые 0+ символов, кроме новой строки, как можно меньше
  • \.jpg - подстрока .jpg.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...