http://qs321.pair.com?node_id=811548


in reply to Re: How do I optimize a regular expression?
in thread How do I optimize a regular expression?

You're correct about my poor man's comments. I didn't know about (?# ... ) comments or I'd have used that. Thanks!

To split on white space might be a good idea for this application, and I may try that, but I'm more interested in how to make expressions work faster.

I don't really understand how backtracking works, so I don't know when (?> ... ) can be used. I probably ought to spend a day in perlre or something.

I'm actually doing my development with Perl 5.10, but the machine it ultimately has to run on has only 5.8.8. Now I'm really wondering how hard it would be to upgrade it.

Thanks for your help!

Replies are listed 'Best First'.
Re^3: How do I optimize a regular expression?
by moritz (Cardinal) on Dec 07, 2009 at 17:02 UTC
    but I'm more interested in how to make expressions work faster

    Then I'll try to give you a few general hints:

    • Learn about backtracking, and make sure you avoid it wherever possible
      • Anchor your regexes if possible
      • Try to avoid .*? and .*
      • Use backtracking-suppressing groups whenever possible
    • Try to use literal strings where possible. The regex engine is smart enough to anchor them automatically as an optimization (in certain cases)
    • Only capture (with (...)) when you actually need it

    Regexp::Assemble promises (among other things) to bring the power of trie optimizations to earlier perls, maybe it's worth a try (and less hassle than updating your perl version).