Обработать перлом сишные комменты (многострочные)
Модератор: Модераторы разделов
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Обработать перлом сишные комменты
Мне тут понадобилось по работе немного доработать свой обработчик исходников, конкретно -- нужно обрабатывать комментарии. Комментарии в языке такие же, как в сях: многострочные, заключённые в /* ... */ Что-то у меня голова уже квадратная и никак не приходит красивое решение как это сделать.. Буду благодарен, если кто-нибудь мне набросает для примера, скажем, как поудалять все такие комменты. Весь многострочный текст хранится в $_
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
madskull
- Сообщения: 1019
- Статус: Экс-металлюга
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Обработать перлом сишные комменты
Спасибо. Никак этот ключ s запомнить не могу, а perldoc'а в cygwin'е нету. Весьма благода.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
xorader
- Сообщения: 1030
- Статус: собирающий миры
- ОС: Debian
Re: Обработать перлом сишные комменты
$_=~s:/\*.+\*/::gs
а так ? :-/
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
*offtopic* - ololo!
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Обработать перлом сишные комменты
А так оно может захватить всё от начала первого комментария до конца последнего.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
madskull
- Сообщения: 1019
- Статус: Экс-металлюга
Re: Обработать перлом сишные комменты
(xorader @ Четверг, 14 Июля 2005, 15:33) писал(а):
$_=~s:/\*.+\*/::gs
а так ? :-/
А так он у тебя съест все от первого /* до самого последнего */ в тексте.
"Жадность квантификаторов".
ArchLinux / IceWM
-
xorader
- Сообщения: 1030
- Статус: собирающий миры
- ОС: Debian
Re: Обработать перлом сишные комменты
Спасибо за разьяснение! Стормозил два раза:
1) показалась строка "$_=~s:/\*.*.\*/::gs" (так как не понял значения "?")
2) вытекает из предыдущего. Не знал следующего:
1) показалась строка "$_=~s:/\*.*.\*/::gs" (так как не понял значения "?")
2) вытекает из предыдущего. Не знал следующего:
Рассмотрим пример: /.*a/ - можно ожидать, что с помощью этого выражения мы найдем часть текста до первого вхождения буквы а. На самом же деле мы получим, часть текста до последнего вхождения этого символа. Происходит это потому, что, натыкаясь на "*" парсер предпринимает попытку найти, как можно более длинную строку. Это называется "жадностью квантификатора". Её можно ограничить с помощью символа "?": /.*?a/. Теперь все будет работать правильно. То же касается и спецсимвола "+".
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
*offtopic* - ololo!