Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Найти в теги <img> в которых отсутствуют width height
 
 автор: vadimka   (15.08.2013 в 17:46)   письмо автору
 
 

Пытаюсь так, но получается бред:
^<img (.*?) (?!width) (.*?)(?!height) (.*?)>$

  Ответить  
 
 автор: cheops   (16.08.2013 в 07:38)   письмо автору
 
   для: vadimka   (15.08.2013 в 17:46)
 

А цель какая? Извлечь или заменить? Лучше всего не пытаться составить одно мега-выражение, а задействовать два совместно с циклом или функцией php preg_replace_callback(). Т.е. вы либо извлекаете все изображения а потом в цикле смотрите есть у них атрибуты или нет. Либо задействуете функцию php preg_replace_callback() и принимаете решение в функции обратного вызова.

  Ответить  
 
 автор: vadimka   (16.08.2013 в 12:38)   письмо автору
 
   для: cheops   (16.08.2013 в 07:38)
 

найти в коде по всему проекту, я ищу через регулярные выражения....

  Ответить  
 
 автор: Sfinks   (16.08.2013 в 09:51)   письмо автору
 
   для: vadimka   (15.08.2013 в 17:46)
 

Если вам нужно только теги, то можно так:
<?php
  header
('Content-Type: text/plain');
  
$s '<img src="img1.gif">
        <img src="img2.gif" width=100>
        <img height=100 src="img3.gif">
        <img src="img4.gif">
        <img width="100" height="100" src="img5.gif">
        <img src="img6.gif">
        <img src="img7.gif">'
;

  
$p "#<img(?:.(?!(?:width|height)\s*=\s*\"?\d+\"?))+?>#si";

  
preg_match_all$p$s$o );
  
print_r($o);
?>
Array(
    [0] => Array(
            [0] => <img src="img1.gif">
            [1] => <img src="img4.gif">
            [2] => <img src="img6.gif">
            [3] => <img src="img7.gif">
        )
)

А вот если вам из них нужно еще извлечь значение атрибута src, то лучше воспользоваться советом cheops'а, и пройтись по результату вторым проходом.

  Ответить  
 
 автор: vadimka   (16.08.2013 в 12:47)   письмо автору
 
   для: Sfinks   (16.08.2013 в 09:51)
 

Спасибо! то что нужно!!! не могли б Вы объяснить это место:
?:.(?!(?:

Ваш код работает, и ищет, единственно я его видоизменил, чтобы он "игнорировал" те строчки, где width|height имеется, но там не цифры, а переменные:
<img(?:.(?!(?:width|height)\s*=\s*\"?.*?+\"?))+?>

  Ответить  
 
 автор: Sfinks   (16.08.2013 в 21:03)   письмо автору
 
   для: vadimka   (16.08.2013 в 12:47)
 

?: -это просто указание, чтобы результат из этих скобок не фигурировал в выходном массиве -можно опустить.
\s*=\s*\"?.*?+\"? -опущу чтобы не загромождать РВ и было проще понять.Остается:
<img(.(?!width|height))+?>
Читается так:
<img после которого идет
(. -любой символ
(?! -сразу за которым нет совпадения с шаблоном- width|height)
)+ -такие символы повторяются 1 и более раз
? -до первого совпадения с шаблоном- >

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования