У меня есть это регулярное выражение в PHP:
$regex = '/<img[^>]*'.'src=[\"|\'](.*)[\"|\']/Ui';
Он фиксирует все источники тегов изображений в строке, но я хочу только собирать файлы JPG. Я пытался объединиться с (. *), Но я только доказал, что сосать в регулярном выражении … Сейчас я фильтрую массив, но чувствую себя слишком сильно, как взломать, когда я могу просто сделать это прямо с правильное совпадение.
Попробуй это:
$regex = '/<img ([^>]* )?src=[\"\']([^\"\']*\.jpe?g)[\"\']/Ui';
Я также удалил дополнительный |
в классах символов, которые не нужны.
Во-первых, получите все теги img
с помощью парсера HTML. Затем возьмите те, чье значение атрибута src
сопоставляется с regex \.(jpeg|jpg)$
.
Например, используя этот синтаксический анализатор :
$html = file_get_html('http://example.foo.org/bar.html'); foreach ($html->find('img') as $img) { if (preg_match ("\.(jpeg|jpg)$", $img->src) { //save $img or $img->src or whatever you need } }
Изменить: Я сократил регулярное выражение. Вы также можете использовать \.jpe?g$
.
Пытаться:
$regex = '/<img[^>]*'.'src=[\"|\'](.*[.]jpg)[\"|\']/Ui';
вы должны быть осторожны, чтобы сбежать '
поскольку вы используете его в качестве делителя PHP.
Также поиск файла, который заканчивается на .jpg
или jpeg
, сделает это.
$regex = '/<img[^>]*src=["\']([^\'"]*)\.(jpg|jpeg)["\'][^>]*>/Ui';
Просто нужно искать .jpg перед заключительными цитатами, которые я считаю
$regex = '/<img[^>]*'.'src=[\"|\'](.*\.jpg)[\"|\']/Ui';
Вы все забыли, что теги могут иметь пробелы между <и img
Поэтому правильное регулярное выражение должно начинаться с /<\s*img