"Benchmarked variations include some of those used by kcott"
I'm assuming you're referring to cg_ncg with (?: ... ) and cg_atomic with (?> ... ).
Prior to posting yesterday, and purely out of curiousity, I ran /atg(.+?)(?:taa|tag|tga)/ and /atg(.+?)(?>taa|tag|tga)/ through Regexp::Debugger looking at the matching process step-by-step. From memory, ?: took 64 steps (in total) to complete the match while ?> took 66 steps. That probably accounts for the cg_atomic vs. cg_ncg 3% (66/64 = 1.03125).
Again from memory, the two extra steps occurred after failing to match taa|tag|tga after either the 'a' or 't' of 'atg'. For the ?: case, the steps were something like: "(?:" start non-capture group; "taa" no match; "|" next alt; ...; "tga" no match. For the ?> case: "(?>" start non-backtracking group; ... as for ?: ...; (then the additional step) ")" end non-backtracking group.
Obviously, you can check that yourself if you're so inclined. I wasn't inclined to repeat the process. :-)
[I haven't analysed your benchmarking further.]
-- Ken
In reply to Re^4: Simple regex question. Grouping with a negative lookahead assertion.
by kcott
in thread Simple regex question. Grouping with a negative lookahead assertion.
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |