in reply to When would I want to use possessive quantifiers?
Without knowing the internals of the regex engine,
'aaaaaaaaaaaaaaa' =~ /^a+b/
would try
You could prevent that by using
'aaaaaaaaaaaaaaa' =~ /^a++b/
That said, /^a+b/ is already highly optimised. (The regex engine searches for "ab" and fails if it doesn't exist.) But replace "a" and "b" with more complex patterns and it's up to you to provide the optimisation using the possessive modifier.
Compare
$ perl -Mre=debug -e'"aaaaaaaaaaaaaaa" =~ /^a+[bB]/' ... Matching REx "^a+[bB]" against "aaaaaaaaaaaaaaa" 0 <> <aaaaaaaaaa> | 1:BOL(2) 0 <> <aaaaaaaaaa> | 2:PLUS(5) EXACT <a> can match 15 times out of +2147483647... 15 <aaaaaaaaaaaa> <> | 5: ANYOF[Bb][](16) failed... 14 <aaaaaaaaaaa> <a> | 5: ANYOF[Bb][](16) failed... 13 <aaaaaaaaaa> <aa> | 5: ANYOF[Bb][](16) failed... 12 <aaaaaaaaa> <aaa> | 5: ANYOF[Bb][](16) failed... 11 <aaaaaaaa> <aaaa> | 5: ANYOF[Bb][](16) failed... 10 <aaaaaaa> <aaaaa> | 5: ANYOF[Bb][](16) failed... 9 <aaaaaa> <aaaaaa> | 5: ANYOF[Bb][](16) failed... 8 <aaaaa> <aaaaaaa> | 5: ANYOF[Bb][](16) failed... 7 <aaaaa> <aaaaaaaa> | 5: ANYOF[Bb][](16) failed... 6 <aaaaa> <aaaaaaaaa> | 5: ANYOF[Bb][](16) failed... 5 <aaaaa> <aaaaaaaaaa> | 5: ANYOF[Bb][](16) failed... 4 <aaaa> <aaaaaaaaaa> | 5: ANYOF[Bb][](16) failed... 3 <aaa> <aaaaaaaaaa> | 5: ANYOF[Bb][](16) failed... 2 <aa> <aaaaaaaaaa> | 5: ANYOF[Bb][](16) failed... 1 <a> <aaaaaaaaaa> | 5: ANYOF[Bb][](16) failed... failed... Match failed ... $ perl -Mre=debug -e'"aaaaaaaaaaaaaaa" =~ /^a++[bB]/' ... Matching REx "^a++[bB]" against "aaaaaaaaaaaaaaa" 0 <> <aaaaaaaaaa> | 1:BOL(2) 0 <> <aaaaaaaaaa> | 2:SUSPEND(9) 0 <> <aaaaaaaaaa> | 4: PLUS(7) EXACT <a> can match 15 times out o +f 2147483647... 15 <aaaaaaaaaaaa> <> | 7: SUCCEED(0) subpattern success... 15 <aaaaaaaaaaaa> <> | 9:ANYOF[Bb][](20) failed... Match failed ...
|
|---|