正则表达式中的贪婪非贪婪

近几天在做几个爬虫,分析网页url的时候,抓取总是出现问题。后来了解到是贪婪和非贪婪模式的问题。

记录一下本是想在一个html中抓取大量这种模式的href连接

<a href="http://www.xxxx.info/post/90934717083">xxxxx</a></br>

写的正则表达式为

reg = r‘<a href="(.+)">‘

经过Regulator分析后,下面语句也匹配了出来

href="http://www.xxx.info/page/2">/page/2</a>" <span class="webkit-html-attribute-name">id</span>="<span class="webkit-html-attribute-value">pageNavOlder</span>"></span>下一页?<span class="webkit-html-tag"></a></span><span class="webkit-html-tag">

  经过分析后知道,仅仅需要抓去匹配项中最短的,这就用到非贪婪模式了。

  默认情况下,正则表达式匹配的都是贪婪模式,都是最长匹配,举个最简单的例子

  比如text="abbbbbbbbc", reg = r‘(a.+)‘ 这样抓取的话,匹配出来的是全部字符串,如果这样reg=r‘(a.+?)‘的话,匹配出来的仅仅是ab,最后的问好就是说明非贪婪模式

  当字符?在其他限定符如(*,+,{n},{n,m>)之后的时候,就说明使用非贪婪模式匹配  

  所以我最开始的正则表达式写成

  reg = r‘<a href="(.+?)">‘时,就匹配出来了我想得到的

 http://www.xxxx.info/post/90934717083

  

正则表达式中的贪婪非贪婪

时间: 2024-12-18 01:27:58

正则表达式中的贪婪非贪婪的相关文章

正则表达式话题 【正则表达式--递归匹配与非贪婪匹配 】

[出处:http://www.regexlab.com/zh/regtopic.htm] 引言 本文将逐步讨论一些正则表达式的使用话题.本文为本站基础篇之后的扩展,在阅读本文之前,建议先阅读正则表达式参考文档一文. 1. 表达式的递归匹配 有时候,我们需要用正则表达式来分析一个计算式中的括号配对情况.比如,使用表达式 "\( [^)]* \)" 或者 "\( .*? \)" 可以匹配一对小括号.但是如果括号 内还嵌有一层括号的话 ,如 "( ( ) )&q

python 贪婪 非贪婪 匹配

python re模块还是需要重新学习. python readline 和 readlines(), readline() , read() 三者之间的区别,以前一直都不清楚,现在搞清楚是怎么回事了. readlines() 可以一起显示出整个文件,这个也是迭代显示的,需要追行显示,迭代器的指针会被消耗的. python 中的正则是匹配换行以外的所有的字符..* 是匹配不了所有的字符的.在某些情况下,我的结论是正确的,但是在某些情况下,我的结论又是错误的.刚才遇到的问题,现在终于知道是怎么回事

正则进阶之,回溯, (贪婪* 非贪婪+? 独占++)三种匹配量词

正则的回溯 在正则表达式实现中,回溯是匹配过程的基本组成部分,它是正则表达式如此好用和强大的根源.然而,回溯计算代价很高,如果设计失误,将导致失控.回溯是影响整体性能的唯一因素,理解它的工作原理,以及如何减小使用频率,可能是编写高效正则表达式的关键点. 当一个正则表达式扫描目标字符串时,从左到右逐个扫描正则表达式的组成部分,在每个位置上测试能不能找到一个匹配.对于每一个量词和分支,都必须确定如何继续进行.如果是量词(如*+?或者{2,}),那么正则表达式必须确定何时尝试匹配更多的字符:如果遇到分

正则贪婪,非贪婪,分组,前瞻

1.贪婪模式 正则是:/\d{3,5}/g,字符串是 12345678 那么exec 方法或者match方法返回的结果是什么呢? 是 [123,456] 还是 [1234,5678] 还是[12345] 答案是:[12345] . 正则表达式默认是贪婪模式,即尽可能多的匹配,如果失败那么减一匹配直到最小值.在这种情况下前面5个数字匹配后,下标来到6处,678不会再匹配 2.非贪婪模式 让正则表达式尽可能少的匹配,也就是说一旦成功匹配就不在继续尝试就是非贪婪模式 只要在量词后加上?即可 '1234

正则表达式之 贪婪与非贪婪模式

1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”.“{m,}”.“?”.“*”和“+”. 在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: “{m,n}?”.“{m,}?”.“??”.“*?”和“+?”.

正则基础之——贪婪与非贪婪模式

转载自:http://blog.csdn.net/lxcnn/article/details/4756030 1        概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”.“{m,}”.“?”.“*”和“+”. 在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”

正则表达式中原子的5种类型

原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子.原子是由所有那些未显示指定为元字符的打印和非打印字符组成,所以在这里将其详细划分为五类进行介绍. ①普通字符作为原子 普通字符是编写正则表达式时最常见的原子了,包括所有的大写和小写字母字符.所有数字等.例如,a——z.A——Z.0——9. ’/5/’        –用于匹配字符串中是否有5这个字符出现 ’/php/’      –用于匹配字符串中是否有PHP字符串出现 ②一些特殊字符和元字符作为原子 任何一个符号都可以作为原

正则表达式中的贪婪模式与非贪婪模式详解

1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”.“{m,}”.“?”.“*”和“+”. 在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: “{m,n}?”.“{m,}?”.“??”.“*?”和“+?”.

php正则表达式中的非贪婪模式匹配的使用

php正则表达式中的非贪婪模式匹配的使用 通常我们会这么写: $str = "http://www.baidu/.com?url=www.sina.com/"; preg_match("/http:(.*)com/", $str, $matches); print_r($matches); 结果: Array ( [0] => http://www.baidu/.com?url=www.sina.com [1] => //www.baidu/.com?u