非贪婪匹配遇到换行符

先看两端代码

紫胶色酸E
                                
                                
                                C24H17NO11
                            
                                                    
                                二甲基二硫代氨基甲酸钠二水
                                
                                    CAS号72140-17-1
 CAS号72140-17-1
//表达式1
$itemP = '#\s*?CAS号.*?\s*?#i';
//表达式2
$itemP = '#\s*?CAS号.*?\s*?#i';

我本来想匹配第二段那段代码的,如果用表达式1去匹配的话,会匹配出来一大堆前导废物代码,用第二个表达式才能正确匹配。我找到原因是a标签结束那里不应该用(.|\n)*?去匹配,应该去掉\n,很显然?在这里起不到非贪婪的作用了,也不知道原因在哪里。

经过大神调拨,原来是这个原理,就是贪婪匹配不是全局匹配一个最短的,而是从表达式匹配的地方开始,去匹配一个最短的。不是想当然从全区抽出来一个。

你可能感兴趣的:(非贪婪匹配遇到换行符)