Not a kernel guy

… in the Windows kernel team

Wednesday, August 22, 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')

Из интересного тут только само регулярное выражение. Мне понадобилось н-дцать попыток, чтобы довести его до ума. :-)

Posted at 9:57 am •

RSS feed | Trackback URI

12 Comments »

Trackback by Зеркало: Not a kernel guy — August 22, 2007 @ 10:00 am

Регулярное выражение. Симпатишное :-)….

Стандартный обработчик пробелов в DParser распознаёт пробелы, табуляцию, перевод…

 
Comment by Left2 — August 22, 2007 @ 1:37 pm

Напомнило: это не ascii-art, это regexp….

 
Comment by Not a kernel guy — August 22, 2007 @ 2:07 pm

Только что заметил, что под IE7 пропадают отступы в коде. :-/ Надо бы разобраться почему…

 
Comment by Alex — August 22, 2007 @ 11:01 pm

Ну на то они и “регулярки”. Парадигма программирования. Написать их можно, но частенько другой человек задаётся вопросом: “Что тут написано?” , и уже потом: “Зачем это нужно?”. Однако экономия времени потрясающая.

 
Comment by Anonymous — August 22, 2007 @ 11:18 pm

#define получается тоже отсеивается?

 
Comment by valker — August 22, 2007 @ 11:19 pm

Мне кажется, что из всех широко употребляемых технологий, регулярные выражения выходят из ряда вон благодаря своему антигуманному синтаксису. Никто не знает, существуют ли в природе “визуализаторы-объяснятели” регулярных выражений, чтобы вводишь в него строку, а он её в человеко-легко-перевариваемый вид… а?

 
Comment by valker — August 22, 2007 @ 11:21 pm

Вроде бы, “#define” ещё препроцессором должен того….

 
Comment by Not a kernel guy — August 22, 2007 @ 11:24 pm

 

#define получается тоже отсеивается?

Режуться всё директивы препроцессора и #define в том числе. Просто к моменту когда используется это выражение в коде от препроцессора остаются только #pragma и #line.

 
Comment by Steel Monster — August 23, 2007 @ 12:00 am

 

Никто не знает, существуют ли в природе “визуализаторы-объяснятели” регулярных выражений, чтобы вводишь в него строку, а он её в человеко-легко-перевариваемый вид… а?

Я дома пользуюсь KRegExpEditor’ом. Сильно помогает отлаживать regexp’ы в особо запущенных случаях. Всё никак не могу найти такую же штуку под Windows.

 
Comment by Alex — August 23, 2007 @ 12:38 am
Comment by Was — August 24, 2007 @ 3:32 am

Из бесплатных очень хорош

Comment by Was — August 24, 2007 @ 3:34 am

С тегами напарился :)

Expresso http://www.ultrapico.com/

 
 
 

Your Comment (smaller | larger)

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress