[Regexp] форум.локал мне в помощь

uncle17

Кто рюхает - напишите, а...
есть html, из него надо вытащить все имена картинок и все альты к ним. Имена могут быть в кавычках, а могуть и нет. Альты могут кавычки содержать. А могут и нет:)
Заранее thx

Fragaria

preg_match_all("/<img[^>]*src=['\"]?([^ \"']*)['\"]?[^>]*>/i",$text,$sub) - так вытаскиваются имена файлов. С альтами посложнее, мне в лом думать

Ivan8209

man re_format
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek

uncle17

ни фига - так весь тэг со всем содержимым вытаскивается:( А надо только имя...

Fragaria

йопанаврот, ты смотрел, что находится в массиве $sub? сделай print_r $sub и радуйся жизни. Я там скобки неспроста поставил

uncle17

вроде разобрался... не в регекспе, а как имя получить:) Сенькс:) А с альтами почему сложнее?

Fragaria

потому что
1) сначала может быть альт, а потом уже src
2) в самом альте могут присутствовать кавычки, конечно же, они заслешованы, но выдирать их и убирать слеши имхо геморрой

uncle17

не... всё же сначала срц:) Всё ок... я проверил - вроде у меня во всех хтмлях кавычки в виде &quot; стоят

Fragaria

тогда

preg_match_all("/<img[^>]*src=['\"]?([^ \"']*)['\"]?[^>]*alt=['\"]?([^ \"']*)['\"]?[^>]*>/i",$text,$sub)

uncle17

йопт... и ведь работает

Fragaria

ну да, а почему бы и не работать, регексп-то простейший

uncle17

ню-ню

Fragaria

да он просто выглядит страшно, а пишется в минуту, там всё очевидно
я когда начинал регекспы ботать, тоже в дрожь бросало от того, как скопище слешей, скобок и прочих спецсимволов может что-то осмысленное делать
а теперь легко достаточно такого рода регекспы пишу.

Fragaria

 /<img[^>]*src=['\"]?([^ \"']*)['\"]?[^>]*alt=['\"]?([^ \"']*)['\"]?[^>]*>/i 
пробуем разобрать, чтобы проще понять было:
[^>] - любой символ, кроме закрывающей скобки (обозначим $not_end)
['\"]? - "тут может быть кавычка, а может и не быть" (обозначим $quote)
[^ \"'] - любой символ, кроме кавычек и пробела, которыми ограничивается урл или альт (обозначим $any_symb)
и получаем
/<img$not_end*src=$quote($any_symb*)$quote$not_end*alt=$quote($any_symb*)$quote$not_end*>/i

ruler

mastering regular expressions. revisited

Fragaria

stm5981037

может заданию и не требуется но замечу пару малюсеньких недостатков:
- не работает когда нет альта
- не работает

<img src="123.jpg" alt="abc'qwe">

Fragaria

ага, 1-это я тупанул маленько, 2-выяснили, что такого не бывает, тка как все кавычкм там через &xxx;

uncle17

Эх... кстати... а альты не везде есть:)

Fragaria


/<img[^>]*src=['\"]?([^ \"']*)['\"]?[^>]*(?:alt=['\"]?([^ \"']*)['\"]?)?[^>]*>/i
лови, так и без альта сработает

ramstein

новая задача:

<img alt="alt" src="src">

Fragaria

мне в лом, тем более что автору треда этого не надо

artimon

На самом дел проще и, возможно быстрее, сделать это в два этапа: сначала выдрать все теги img, а потом из них по отдельности вытащить alt'ы и src'ы.

uncle17

Неа... может, и проще, но эти img в итоге надо оставить на тех же местах, только переписать в них src, а сами файлы перекидать в базу

artimon

Выдрать — не означало удалить их из исдожного текста
Оставить комментарий
Имя или ник:
Комментарий: