美文网首页
非贪婪匹配遇到换行符

非贪婪匹配遇到换行符

作者: xilongtao | 来源:发表于2017-06-09 16:08 被阅读0次

先看两端代码

<a href="//chanpin.molbase.cn/c14597-16-1/"><span>紫胶色酸E</span></a>
                                </td>
                                <td><a itemprop="url" target="_blank"
                                       href="//www.molbase.com/en/cas-14597-16-1.html"><span
                                                itemprop="mol_name">3-<3-(2-Aminoethyl)-6-hydroxy-phenyl>-1.2.4.7-tetrahydroxy-anthrachinon-dicarbonsaeure-(5.6); Desacetyl-laccasaeure-A(1)</span></a></td>
                                <td><a href="//www.molbase.cn/formula/C24H17NO11/" rel="nofollow">C24H17NO11</a></td>
                            </tr>
                                                    <tr>
                                <td class="img"><img src="//p2.molbase.net/molpic/03/92/3921909.png?142x100"
                                                     style="width:45px;" alt="二甲基二硫代氨基甲酸钠二水"/></td>
                                <td>
                                    <a href="//baike.molbase.cn/cidian/3921909"><span>CAS号72140-17-1</span></a>
 <a href="//baike.molbase.cn/cidian/3921909"><span>CAS号72140-17-1</span></a>
//表达式1
$itemP = '#<a.*?href="(.*?)"(.|\n)*?>\s*?<span>CAS号.*?</span>\s*?</a>#i';
//表达式2
$itemP = '#<a.*?href="(.*?)".*?>\s*?<span>CAS号.*?</span>\s*?</a>#i';

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

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

相关文章

  • 非贪婪匹配遇到换行符

    先看两端代码 我本来想匹配第二段那段代码的,如果用表达式1去匹配的话,会匹配出来一大堆前导废物代码,用第二个表达式...

  • 正则表达式

    .不能匹配换行符[\s\S]可以匹配\s是匹配所有空白符\S匹配所有非空白符但是这样的匹配是贪婪的 用[\s\S]...

  • 正则表达式:贪婪匹配与非贪婪匹配

    贪婪匹配 贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配 非贪婪匹配 非贪婪匹配:在满足匹...

  • 关于python正则表达式的补充

    1.贪婪匹配和非贪婪匹配 贪婪匹配:顾名思义,贪婪,匹配满足条件越多越好 非贪婪匹配,相反,匹配满足条件越少越好p...

  • 小爬虫实践项目-正则表达式

    以什么开始 任意字符 出现次数 非贪婪匹配贪婪匹配:自右往左开始匹配非贪婪匹配:自左往右开始匹配 代表提取子串 匹...

  • 正则表达式高级使用

    一,贪婪与非贪婪 贪婪:尽可能多的匹配 非贪婪:尽可能少的匹配 非贪婪符可以用在*,?,+的后面 *? 重复1次 ...

  • Day18学习总结-正则表达式和Pygame

    贪婪与非贪婪 非贪婪:在正则中控制匹配不确定次数的符号后边可以加?,来表示尽可能少的匹配贪婪:在贪婪的时候,匹配是...

  • python re 模块

    贪婪匹配 贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配 几个常用的非贪婪匹配 .*?的用...

  • 贪婪与非贪婪匹配

    1.什么是正则表达式的贪婪与非贪婪匹配 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使...

  • javascript正则表达式

    什么是贪婪模式和非贪婪模式? 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功...

网友评论

      本文标题:非贪婪匹配遇到换行符

      本文链接:https://www.haomeiwen.com/subject/frkfqxtx.html