in reply to Regex - unordered lookaround syntax

I am nowhere near being a regex guru and therefore can't answer your question, but I think I've read somewhere that using the /i modifier slows things down considerably. Apparently, using [A-Za-z] is faster than [A-Z] with the /i modifier. Just wanted to point this out in case the code is being run where performance really matters.

Replies are listed 'Best First'.
Re: Re: Regex - unordered lookaround syntax
by diotalevi (Canon) on Apr 28, 2003 at 23:20 UTC

    Nah, take a look at that via use re 'debug'. You'll see that /(?i:[A-Z])/ is /[A-Z]/i is /[A-Za-z]/. All three interpret identically. If you run the actual example through it you'll see its the same. I didn't know the answer to this prior to running these through re'debug' so I'm suggesting that great debug tools like this should be used more often especially when making assertions regarding relative performance. In this case all you win is some source code obfuscation since I hold that its easier to look at either (?i:[A-Z]) (which is really nice because it restricts the effects of /i to just that section or a tacked on /i. Having to be extra specific just makes it easier to type another bug.

      I think the assertion came from Jeff Friedl in this case (Mastering Regular Expressions, 1st ed, not sure about second). He says that the i modifier can be up to 20 times slower than a case specific match, if memory serves. I believe this was during Perl 5.4 though and right before a major regex overhaul. Nice to know it's no longer true.