I see the http parser written by Igor Sysoev for nginx does not use regular expressions


What could be the main reason for such design decision? I guess I could write few regular expressions to parse HTTP req & res this would be a lot less complex than Igor's version of the parser.

What am I missing here?

  • maybe he didn't find a good c regex lib to his liking – ratchet freak Jun 23 '13 at 3:09
  • that is a hell a lot of an effort just to 'not like' a reg exp lib. Dont you think? – botchedDevil Jun 23 '13 at 3:16
  • 3
    Regular expressions are for regular languages. Are http requests/responses regular? If it is specified by a context-free grammar, then a full-blown parser is necessary to handle all the cases. – jhewlett Jun 23 '13 at 3:19
  • 1
    or he didn't look very hard for one/wanted it to not rely on one. and even if he did use regex he'd still only have a lexer at most not a parser – ratchet freak Jun 23 '13 at 3:22
  • 2
    Why would it? Regular expressions aren't the only method for parsing data, nor are they the best in every situation. Right tool for the job and all that. – stonemetal Jun 24 '13 at 16:15

I asked this question over the mailing list of nginx. The following was the response:

Regular expressions isn't something readily available when you code in C, nor something which can be easily used to parse data available in chunks. It's also highly unlikely that even carefully coded regular expressions will be able to beat C code in terms of performance.

Of course if you are coding some simple http server in perl or javascript - using regular expressions is a way to go. But it's unlikely a good choise if you are coding high performance web server in C.

-- Maxim Dounin (member of nginx dev mailing list)

  • Can't get a better answer than from the creator. But even if C did have good regex parsing, it is slower than mem ptr char parsing by an average of 1,000 times slower (in my experience with hundreds of data parsers against hundreds of millions of parsed data objects). – Suamere Aug 15 '13 at 21:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.