Regex для захвата только изображений JPG - PullRequest
2 голосов
/ 16 ноября 2009

У меня есть это регулярное выражение в PHP:

$regex = '/<img[^>]*'.'src=[\"|\'](.*)[\"|\']/Ui';

Он захватывает все источники тегов изображения в строке, но я хочу захватывать только файлы JPG. Я пытался возиться с (. *), Но я только доказал, что я отстой от регулярных выражений ... Прямо сейчас я фильтрую массив, но чувствую себя слишком как хак, когда я могу просто сделать это прямо с правильное соответствие.

Ответы [ 6 ]

6 голосов
/ 16 ноября 2009

Попробуйте это:

$regex = '/<img ([^>]* )?src=[\"\']([^\"\']*\.jpe?g)[\"\']/Ui';

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

3 голосов
/ 16 ноября 2009

Сначала получите все теги img с помощью HTML-парсера. Затем возьмите те, чье значение атрибута src соответствует регулярному выражению \.(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$.

0 голосов
/ 16 ноября 2009

Вы все забыли, что теги могут иметь пробелы между <и img </p>

Так что правильное регулярное выражение должно начинаться с /<\s*img

0 голосов
/ 16 ноября 2009

Попробуйте:

$regex = '/<img[^>]*'.'src=[\"|\'](.*[.]jpg)[\"|\']/Ui';
0 голосов
/ 16 ноября 2009

вы должны быть осторожны, чтобы избежать ', так как вы используете его в качестве разделителя PHP.

Также выполняется поиск файла, который заканчивается на .jpg или jpeg.

$regex = '/<img[^>]*src=["\']([^\'"]*)\.(jpg|jpeg)["\'][^>]*>/Ui';
0 голосов
/ 16 ноября 2009

Просто нужно найти .jpg перед заключительными кавычками.

$regex = '/<img[^>]*'.'src=[\"|\'](.*\.jpg)[\"|\']/Ui';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...