Working from pattern 'a|ab|abc|abcde|ef|gh|ghij|qrst|nqmz|stuv', qr='(?-xism:a|ab|abc|abcde|ef|gh|ghij|qrst|nqmz|stuv)' preComp finds 6 preCompQR finds 6 noPrecomp finds 6 Benchmark: running noPrecomp, preComp, preCompQR, each for at least 3 CPU seconds... noPrecomp: 4 wallclock secs ( 3.09 usr + 0.01 sys = 3.10 CPU) @ 33414.22/s (n=103417) preComp: 4 wallclock secs ( 3.24 usr + 0.01 sys = 3.25 CPU) @ 35360.06/s (n=115097) preCompQR: 2 wallclock secs ( 3.08 usr + 0.02 sys = 3.10 CPU) @ 35094.39/s (n=108933) Rate noPrecomp preCompQR preComp noPrecomp 33414/s -- -5% -6% preCompQR 35094/s 5% -- -1% preComp 35360/s 6% 1% --