Синтаксис рег. выр. (Perl-совместимые)

alpes

Весь мир на ладони
Синтаксис рег. выр. (Perl-совместимые)

Разбираюсь с регами, столкнулся вот с такой ситуацией:
PHP:
//найти все что взято в "" и начинается на /img/
preg_match_all('"(/img/[^"]+)"',$str_n,$url_img);
//на эту строку ругается: Warning: Unknown modifier ']' in ... и естно ничего не находит
preg_match_all('("(/img/[^"]+)")',$str_n,$url_img);
//в таком варианте отрабатывает и находит все что нужно, но...
Объясните: зачем ВСЕ брать в (), если интересует тока то что стоит внутри ""?
или все таки я где-то не корректно составляю рег.выражение?
 

inTox

вёбных дел мастер
preg_match_all('/(?:\"\/img\/[^\"]+\")/', $str_n, $url_img);
попробуй так, что-ли...
 

Demiurg

Guest
>тогда уж
>'/"(\/img\/[^"]+)"/'
ну да, торможу

а вообще лучше '|"(/img/[^"]+)"|'
что бы без лишних слешей
 

Larson

Новичок
alpes, в первом случае у тебя кавычки являются этими, забыл как называется, в общем внутри них лежит твое регулярное выражение, а во втором ты сделал их скобками. Соответственно в первом случае после [^" он думает, что рег_варажение кончилось и начиниет смотреть наличие модификаторов, среди которых не находит ] и ругается. Поставив во втором случае ( в качестве, ну этих самых, " стала частью выражения и все нормально. Поставь в первом варианте \ перед ", которое будет говорить о том, что после \ идет служебный символ, но его надо рассматривать как неслужебный, и должно все заработать.
 

Larson

Новичок
Блин, это //найти все что взято в "" и начинается на /img/ не заметил, тогда в качестве, этих самых, возьми другой символ, отличный от " - (\ | ( и т.д.)
 

alpes

Весь мир на ладони
Larson, спасибо за разъяснения, действительно, так
PHP:
'"(/img/[^\"]+)"'
сработало, смысл происходящего уловил :) То что "забыл как называется" по идее должно называться "Delimiter".
Так '/"(\/img\/[^"]+)"/' тоже получилось, а так '("(/img/[^"]+)")' вроде короче и нагляднее предыдущего ;)

Отличие первого и двух остальных в том что в 1-м возвращаются два одинаковых массива $url_img[0] и $url_img[1] содержащих результат поиска того что стоит в "", а в остальных в [0] результаты полных совпадений (вместе с ""), а в [1] собственно тока внутренность.

Всем СПАСИБО!
 
Сверху