On Tue, Aug 12, 2008 at 02:00:59AM +0400, Aleksey Avdeev wrote: > Alexey Tourbin пишет: > >On Tue, Aug 12, 2008 at 01:48:36AM +0400, Aleksey Avdeev wrote: > >> Решая задачу проверки использования > >> (не объявления) макроса в спеке > >> нарисовал такое регулярное выражение > >>(для egrep): > >> > >>'%(<макрос>($|[^[:alnum:]_])|([{](<макрос>[}]|(|!)\?<макрос>[:}])))' > >> > >> Вопросы: > >> > >>1. Все ли случаи я учёл? > > > >%% работает как escape для %. > > Тогда: > > '(^|[^%])%(a_b($|[^[:alnum:]_])|([{](a_b[}]|(|!)\?a_b[:}])))' Контрпример: %%%_libdir. Если привязываться регулярным выражением к первому "%", то потребуется неограниченный look-behind: значащему знаку "%" должно предшествовать четное количетво знаков "%".