不要让稻草压死骆驼。每利用一个普通括号()而不长短捕捉型括号(?:…),就会保存一部门内存等着你再次会见。这样的正则表达式、无限次地运行次数,无异于一根根稻草的堆加,终于能将骆驼压死。养成公道利用(?:…)括号的习惯。
宁简勿繁。将一条巨大的正则表达式拆分为两条或多条简朴的正则表达式,编程难度会低落,运行效率会晋升。譬喻用来消除行首和行尾空缺字符的正则表达式s/^\s+|\s+$//g;,其运行效率理论上要低于s/^\s+//g; s/\s+$//g; 。这个例子出自《能干正则表达式》第五章,书中对它的评论是“它险些老是最快的,并且显然最容易领略”。既快又容易领略,何乐而不为?事情中我们尚有其它的来由要将C==(A|B)这样的正则表达式拆为A和B两条表达式别离执行。譬喻,固然A和B这两种环境只要有一种可以或许击中所需要的文本模式就会乐成匹配,可是假如只要有一条子表达式(譬喻A)会发生误匹配,那么岂论其它的子表达式(譬喻B)效率如何之高,范畴如何精准,C的总体精准度也会因A而受到影响。
巧妙定位。有时候,我们需要匹配的the,是作为单词的the(双方有空格),而不是作为单词一部门的t-h-e的有序分列(譬喻together中的the)。在适当的时候用上^,$,\b等等定位锚点,能有效晋升找到乐成匹配、裁减不乐成匹配的效率。