Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите с регуляркой
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Помогите с регуляркой

Страниц (1): [1]
 

1. vanicon - 29 Сентября, 2014 - 20:08:35 - перейти к сообщению
Нужно получить некоторые атрибуты у iframe и img а также заменить их потом на другой тег.
Для этого отлично подходит preg_replace_callback, но у меня она почему-то заменяет все целиком.
Вот регулярное выражение:
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(<([img|iframe]+).*(?:src|type)=([\'"])?([^\'"]+)([\'"])?.*>)+/im

Необходимо обработать атрибуты src и type, в конце необязательно заменять закрывающий iframe, так как потом он затрется strip_tags'om
Что не так в регулярке?
2. vanicon - 30 Сентября, 2014 - 19:52:09 - перейти к сообщению
Нашел решение, дело было в .*
Получилось следующие
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(<([img|iframe]+)[^>]+?(?:src|type)=([\'"])?([^\'"]+)([\'"])?[^>]+?>)+/i

Теперь проблема с закрывающим тегом (нужен только iframe), пробовал вот так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(<iframe[^>]+?data-value=([\'"])?([^\'"]+)([\'"])?[^>]*?><\/iframe>)+/i

Но она снова видит 3 iframe как 1, и заменяет сразу 3.
Что не так?
3. MiksIr - 30 Сентября, 2014 - 20:15:02 - перейти к сообщению
Я бы вам советовал не увлекаться попытками воткнуть все в одну регулярку. Это даже можно сделать, но читабельность все этого адская.

Лучше сделайте цепочку - сначала найдите /<iframe[^>]*>.*?<\/iframe>/si, а в коллбеке уже проверьте наличие data-value и т.п.

 

Powered by ExBB FM 1.0 RC1