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

Тема в разделе "Регулярные выражения", создана пользователем dwarf, 28 фев 2014.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. dwarf

    dwarf Постоялец

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

    xpert13 <(*_*)>

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

    Vishez

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

    murlo Создатель

    Регистр.:
    8 июн 2006
    Сообщения:
    34
    Симпатии:
    33
    Заматчить - удалить что ли?
    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);
     
  5. dwarf

    dwarf Постоялец

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

    xpert13 <(*_*)>

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

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

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    О, огромное спасибо, помогли мне избавится от неприятного бага.

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

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