On 31.08.2019 19:45, Markus Elfring wrote: >>>> +# nested likely/unlikely calls >>>> + if ($line =~ /\b(?:(?:un)?likely)\s*\(\s*!?\s*(IS_ERR(?:_OR_NULL|_VALUE)?|WARN)/) { >>>> + WARN("LIKELY_MISUSE", >>> >>> How do you think about to use the specification “(?:IS_ERR(?:_(?:OR_NULL|VALUE))?|WARN)” >>> in this regular expression? > … >> IS_ERR >> (?:_ <- Another atomic group just to show that '_' is a common prefix? > > Yes. - I hope that this specification detail can help a bit. I'm not sure that another pair of brackets for a single char worth it. >> Usually, Perl interpreter is very good at optimizing such things. The interpreter optimizes it internally: echo 'IS_ERR_OR_NULL' | perl -Mre=debug -ne '/IS_ERR(?:_OR_NULL|_VALUE)?/ && print' Compiling REx "IS_ERR(?:_OR_NULL|_VALUE)?" Final program: 1: EXACT <IS_ERR> (4) 4: CURLYX[0]{0,1} (16) 6: EXACT <_> (8) <-- common prefix 8: TRIE-EXACT[OV] (15) <OR_NULL> <VALUE> ... > > Would you like to help this software component by omitting a pair of > non-capturing parentheses at the beginning? > > \b(?:un)?likely\s* This pair of brackets is required to match "unlikely" and it's optional in order to match "likely". Regards, Denis