Регулярное выражение. Симпатишное :-).
August 22nd, 2007
Стандартный обработчик пробелов в DParser распознаёт пробелы, табуляцию, переводы строк, C-подобные комментарии и директивы “#line”. Мне нужно было отсеивать ещё и “#pragma” директивы, которые препроцессор от Visual C++ любезно оставляет в коде. Для этого понадобилось определить свой обработчик пробельных символов:
re_whitespace =
re.compile(r'(\\s+|/\\*(.|\\n)*?\\*/|//.*\\n|(^\\s*\\#.*$((?<=\\\\)\\n.*$)*))+', re.M)
def whitespace(loc):
m = re_whitespace.match(loc.buf, loc.s)
if m:
loc.s = m.end()
loc.line += m.group().count('\\n')
Из интересного тут только само регулярное выражение. Мне понадобилось н-дцать попыток, чтобы довести его до ума.
Напомнило: это не ascii-art, это regexp….
Только что заметил, что под IE7 пропадают отступы в коде. :-/ Надо бы разобраться почему…
Ну на то они и “регулярки”. Парадигма программирования. Написать их можно, но частенько другой человек задаётся вопросом: “Что тут написано?” , и уже потом: “Зачем это нужно?”. Однако экономия времени потрясающая.
#define получается тоже отсеивается?
Мне кажется, что из всех широко употребляемых технологий, регулярные выражения выходят из ряда вон благодаря своему антигуманному синтаксису. Никто не знает, существуют ли в природе “визуализаторы-объяснятели” регулярных выражений, чтобы вводишь в него строку, а он её в человеко-легко-перевариваемый вид… а?
Вроде бы, “#define” ещё препроцессором должен того….
Режуться всё директивы препроцессора и #define в том числе. Просто к моменту когда используется это выражение в коде от препроцессора остаются только #pragma и #line.
Я дома пользуюсь KRegExpEditor’ом. Сильно помогает отлаживать regexp’ы в особо запущенных случаях. Всё никак не могу найти такую же штуку под Windows.
Под Windows пользую
PCRE Workbench
http://www.renatomancuso.com/software/pcreworkbench/pcreworkbench.htm
Из бесплатных очень хорош
С тегами напарился
Expresso http://www.ultrapico.com/