Найти в html коде все тэги img без аттрибута src

Статус
В этой теме нельзя размещать новые ответы.

dwarf

Постоялец
Регистрация
12 Июн 2011
Сообщения
88
Реакции
18
Сабж, нужно заматчить все тэги img у которых не задан аттрибут src
Код:
<img width="1" />
 

xpert13

<(*_*)>
Регистрация
7 Ноя 2008
Сообщения
182
Реакции
469
Так просто составить регулярку не получится. Они ищут основываясь на том, что есть, а не чего нету. Потому предлагаю поступить по другому:
1. Ищем все рисунки с помощью регулярки "<img [^>]*>"
2. В найденных проверяем наличие "src="
 

Vishez

Гуру форума
Регистрация
19 Авг 2013
Сообщения
170
Реакции
83
jQuery не подойдет? Она как раз вернет набор элементов.
Код:
alert($('img[src]').size());
 

murlo

Создатель
Регистрация
8 Июн 2006
Сообщения
34
Реакции
37
Заматчить - удалить что ли?
PHP:
$data = preg_replace_callback("@<img\s[^<>]{0,}>@", create_function('$matches', 'return preg_match("@\ssrc=@i", $matches[0]) ? $matches[0] : "";'), $data);
или
PHP:
function myFunc($matches){
  return preg_match("@\ssrc=@i", $matches[0]) ? $matches[0] : "";
}
$data = preg_replace_callback("@<img\s[^<>]{0,}>@", "myFunc", $data);
 

dwarf

Постоялец
Регистрация
12 Июн 2011
Сообщения
88
Реакции
18
Парни. Круто, спасибо, но в итоге я написал сам покурив маны.
Решение найти все <img> и перебрав, найти без аттрибута src, не подходит из-за сильного снижения производительности по сравнению с одним регекспом.
все выглядит вот так:
Код:
/<img(?!.*src).*?>/i
 

xpert13

<(*_*)>
Регистрация
7 Ноя 2008
Сообщения
182
Реакции
469
Очень круто, что вы нашли решения, честно говоря не додумался до такого вариант, но советую вам его немного отредактировать, иначе не будет удалять всё. Более правильный вариант:
Код:
<img(?![^>]*src)[^>]*?>

Чем плох ваш вариант? А вот пример:
8FOvk79.png


Как видите регулярка не срабатывает для строки, в которой одновременно находятся картинки с src и без. К тому же оператор "точка" более "тяжеловесный", так как включает в себя больше вариаций.
 

dwarf

Постоялец
Регистрация
12 Июн 2011
Сообщения
88
Реакции
18
Как видите регулярка не срабатывает для строки, в которой одновременно находятся картинки с src и без. К тому же оператор "точка" более "тяжеловесный", так как включает в себя больше вариаций.

О, огромное спасибо, помогли мне избавится от неприятного бага.

Вот фикс, надеюсь ничего не пропустил в этот раз:
Код:
/<img(?![^>]*src)[^>]*>/i
немного подстраховался 2-мя символьными классами.

Ахахах, не заметил у вас решения в самом начале поста, придумал почти в точности такое же, забавно)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху