что делает это регулярное выражение

  • Автор темы Алексей Чепрасо
  • Дата начала

Алексей Чепрасо

Guest
что делает это регулярное выражение

уважаемые программисты, скажите пожалуйста, что делает это регулярное выражение, никак не могу догнать:
preg_match('|{' . $name . '}(.+?){/' . $name . '}|s', $content, $match);
 

Demiurg

Guest
в общем случае много чего может наделать.
например при $name == '|'; вообще работать не будет, и это еще не самое срашное.
 

Алексей Чепрасо

Guest
Originally posted by Demiurg
в общем случае много чего может наделать.
например при $name == '|'; вообще работать не будет, и это еще не самое срашное.
а что самое страшное ???
 

Demiurg

Guest
>а что самое страшное ???
это зависит от контекста в котором употребляется это выраженее.
 

Алексей Чепрасо

Guest
Originally posted by Demiurg
>а что самое страшное ???
это зависит от контекста в котором употребляется это выраженее.
понятно ... вообще-то это из функции, которая в шаблоне заменяет метки на значения ... а зачем в регулярном выражении стоит (.+?), зачем знак вопроса?, разве недостаточно написать (.+) и это будет значить любой символ 1 или более раз ... ну никак с этими выражениями не разберусь ... :(
 

Demiurg

Guest
>ну никак с этими выражениями не разберусь
может стоит оботись без них ?
 

Алексей Чепрасо

Guest
Originally posted by Demiurg
>ну никак с этими выражениями не разберусь
может стоит оботись без них ?
:( :( :( нет, я хочу разобраться ... если подскажете насчет знака вопроса, буду очень признателен!
а еще, если не трудно, подскажите ... |выражение| - прямые палочки ограничивают выражени? вроде в книжках написано, что ограничителями являются \\ ...
 

Макс

Старожил PHPClub
Алексей Чепрасо
а зачем в регулярном выражении стоит (.+?), зачем знак вопроса?, разве недостаточно написать (.+) и это будет значить любой символ 1 или более раз ...
Выполни следующие 2 примера и найди разницу:
PHP:
$str = '{one} replace {/one} static {one} replace {/one} static';
echo preg_replace('|{one}(.+?){/one}|', '!NEW!', $str);
и
PHP:
$str = '{one} replace {/one} static {one} replace {/one} static';
echo preg_replace('|{one}(.+){/one}|', '!NEW!', $str);
 

Demiurg

Guest
ограничителями могут выступать почти любые символы (подробности в мануале). знак вопроса - это лбо есть, либо нет. Т.е /a?b/ это либо ab, либо b.
 

Макс

Старожил PHPClub
если точнее, то в данном случае знак вопроса ограничивает "жадность" выражения .+ то есть находит минимальное совпадение. В других контекстах он может иметь совершенно иное значение.
 

ForJest

- свежая кровь
а вообще в данном случае было бы правильным написать
([^}]+) вместо (.+?).
Т.е. сделать то, что нужно сделать - заставить движок не есть '}'
 

Алексей Чепрасо

Guest
а можете дать ссылку на какой-нибудь хороший учебник или статью про регулярные выражения ?
 

Profic

just Profic (PHP5 BetaTeam)
На английском?
Легко - в мане по PHP в разделе про перловые РВ
На русском - в основном все переводное, потому лучше читать оригинал %)
 

Алексей Чепрасо

Guest
Originally posted by Maxim Matyukhin
если точнее, то в данном случае знак вопроса ограничивает "жадность" выражения .+ то есть находит минимальное совпадение. В других контекстах он может иметь совершенно иное значение.
не понял как это "ограничивает" жадность?

если без знака вопроса (preg_replace('|{one}(.+){/one}|', '!NEW!', $str)), то делается одна замена, а остальная часть строки игнорируется, правильно? ...

а если со знаком вопроса (preg_replace('|{one}(.+?){/one}|', '!NEW!', $str)), то замены делаются во всей строке - то есть наоборот жадность вроде как увеличивается !???? :)
 

Demiurg

Guest
нет, если без знака вопроса, то заменяется все от первого {one} до последнего {/one}
 

Макс

Старожил PHPClub
а можете дать ссылку на какой-нибудь хороший учебник или статью про регулярные выражения ?
лучшего описания, чем в этой книге я не видел. Англоязычную версию можно скачать в сети (ссылку не помню, во многих FTP-архивах видел)
 

Алексей Чепрасо

Guest
Originally posted by Maxim Matyukhin
лучшего описания, чем в этой книге я не видел. Англоязычную версию можно скачать в сети (ссылку не помню, во многих FTP-архивах видел)
спасибо. заказал себе эту книгу в books.ru ... последний вопрос: зачем в конце выражения символ s стоит:
|выражение|s
 
Сверху