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?url=www.sina. )

非贪婪模式匹配:

$str = "<a http://www.baidu/.com?url=www.sina.com/";

preg_match("/http:(.*?)com/", $str, $matches);

print_r($matches);

结果:

Array ( [0] => http://www.baidu/.com [1] => //www.baidu/. )

简单的说只要在一个字符后面跟上限定个数的特殊字符,匹配就是非贪婪模式了。小伙伴们是否理解了呢?

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-14 04:04:15

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

re模块中的非贪婪匹配

python的re模块中有贪婪匹配和非贪婪匹配之分,当使用*时会匹配零个或多个,使用+时会匹配一个或多个.当使用?在前边特殊符号前时会进行非贪婪匹配,匹配零个或者一个,今天主要讨论非贪婪匹配中存在的坑. import re res = re.findall('a?','aaa') print(res) #['a', 'a', 'a', ''] res1 = re.findall('pa?','paaa') print(res1) #['pa'] res2 = re.findall('.?','a

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

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

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

近几天在做几个爬虫,分析网页url的时候,抓取总是出现问题.后来了解到是贪婪和非贪婪模式的问题. 记录一下本是想在一个html中抓取大量这种模式的href连接 <a href="http://www.xxxx.info/post/90934717083">xxxxx</a></br> 写的正则表达式为 reg = r'<a href="(.+)">' 经过Regulator分析后,下面语句也匹配了出来 href=&qu

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

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

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

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

python 贪婪和非贪婪模式

这样的正则表达式: r'\*(.+)\*'  如果想要匹配*something*这样的一个串按道理说是没问题的 但是如果文本是*this* is *something* 那么我们的正则表达式就会采取贪婪模式匹配第一个* 和 最后一个* 而中间的 两个*就当作是第一个分组里面的内容了 要想采取非贪婪模式 就只需在其后面加一个问号r'\*(.+?)\*' s1='hello,*something!* pattern1=re.compile('\*(.+)\*') print re.sub(patte

python 正则贪婪模式和非贪婪模式

贪婪模式:在表达式匹配成功的前提下,总是尽可能多的匹配字符飞天蓝模式:在表达式匹配成功的前提下,总是尽量少的匹配字符 1 # !/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import re 4 5 def test(): 6 string = "abc123456789sdsddskcas" 7 print "a(.*)c贪婪模式匹配结果:" 8 print re.findall(r"a(.*)c&quo

简单聊一聊正则表达式中的贪婪匹配和非贪婪匹配

1. 贪婪匹配 在JS中利用正则表达式时,默认的匹配就是贪婪匹配,也就是尽可能多的去匹配,举个例子: var s = 'aaa'; var regexp = /a+/; // 匹配1个或多个a,贪婪匹配 console.log(regexp.exec(s)[0]); // 'aaa' 在上面的例子中,匹配到了 'aaa' . 2. 非贪婪匹配 我们同样可以进行非贪婪匹配只需要在正则表达式待匹配的字符后面加上一个 ? 即可. 还是上面的例子: var s = 'aaa'; var regexp =

python的正则表达式(re函数,贪婪和非贪婪)

我们连接Linux来实现正则表达式 一.Python3 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法,功能完全一致的函数,这些函数使用一个模式字符