|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Chuprina 2:5020/400 15 Nov 2004 16:55:49 To : Alex Shevchuk Subject : Re: Замена при условии -------------------------------------------------------------------------------- Alex Shevchuk -> Andrey Sapozhnikov @ Mon, 15 Nov 2004 09:22:41 +0000 (UTC): >>> Имеется строка, в которой могут встречаться штуки вида ":имя:". >>> Hужно заменить рэгэкспом эти штуки на "<img src=smiles/имя.gif>" при >>> условии, что имя.gif существует. Менять можно не более трех таких >>> фиговин. >>> (Это типа смайлики в чате). AS>> my $x = 0; s|:(\w+):|$x < 3 && -f "$1.gif" ? ($x++, "<img AS>> src=smiles/$1.gif>") : $&|ge; AS> Здорово! Кто бы мог подумать, что внутрь регекспа можно цикл >>> запихнуть! :)) Любой, кто читал perldoc perlre. Впрочем, он также знал бы, что в данном случае цикл засунут ни разу не в регекс. Регулярное выражение - это первый аргумент оператора s, и в него циклы вставляются иначе. И кстати, тут и не цикл. Тут его тело. Цикл-то снаружи - начальное присвоение $x и модификатор g. AS> Только вот почему $&, а не $1? Или в данном случае без разницы? $1 - это без обоих :. Если тебе не надо менять на смайлик, то надо оставить как было. А это - $&. -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, Jabber: ran@jabber.ran.pp.ru --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/2560640e05f43.html, оценка из 5, голосов 10
|