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

一般情况下,正则表达式的匹配是贪婪模式的,比如下面这个例子:

字符串:....src="http://www.bloghome.cn/1.mp3" type="application/x-mplayer2" ....

要求的结果:http://www.bloghome.cn/1.mp3

如果匹配表达式写为:/src="(.*)"/,则得不到正确的结果,因为最后一个双引号的匹配是贪婪模式的。

解决办法:匹配表达式写为:

/src="(.*)".?/

上面表达式中,".?是非贪婪模式匹配。也就是说,只要在一个字符后面跟上限定个数的特殊字符,匹配就是非贪婪模式了。

时间: 2024-10-09 20:33:22

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

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

一般情况下,正则表达式的匹配是贪婪模式的,比如下面这个例子: 字符串:....src="http://www.bloghome.cn/1.mp3" type="application/x-mplayer2" .... 要求的结果:http://www.bloghome.cn/1.mp3 如果匹配表达式写为:/src="(.*)"/,则得不到正确的结果,因为最后一个双引号的匹配是贪婪模式的. 解决办法:匹配表达式写为: /src="(.*

浅谈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?

正则表达式之 贪婪与非贪婪模式详解(概述)_正则表达式

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

正则表达式之 贪婪与非贪婪模式详解(概述)

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

php正则表达式中贪婪与非贪婪介绍_正则表达式

一.贪婪与非贪婪 什么叫贪婪,比如说要从字符串中<td>面包一</td><td>面包二</td>吃面包,本来你只可以吃面包一,可是你贪心,于是就把第一个<td>到最后一个</td>里面的两个面包取出来了,你想多吃点,非贪婪也就是你不贪吃了,就只吃面包一. 我们来看看正则里面是怎么贪婪的 <?php $str = '<td>面包一</td><td>面包二</td>'; preg_ma

实例解析Java程序中正则表达式的贪婪模式匹配_java

贪婪模式(Greedy): 数量表示符默认采用贪婪模式,除非另有表示.贪婪模式的表达式会一直匹配下去,直到无法匹配为止.如果你发现表达式匹配的结果与预期的不符,很有可能是因为--你以为表达式只会匹配前面几个字符,而实际上它是贪婪模式,所以会一直匹配下去. 贪婪与非贪婪,加上?为非贪婪: var s = '1023000'.match(/(\d+)(0*)/); s ["1023000", "1023000", ""] var s = '10230

Delphi中正则表达式语法(6) 贪婪匹配与非贪婪匹配

//贪婪匹配 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := '<html><head><title>标题 </title></head><body>内容 </body></html>'; reg.RegEx := '<.*>'; //将会全部匹配, 因为两头分别是: < 和 > reg.R

正则表达式效率:贪婪、非贪婪与回溯详解

某同学想过滤 之间的内容,那是这么写正则以及程序的. 1 $str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪 看起来,好像没什么问题,其实则不然.若 1 $str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>'; 那么经过上面的程序处理,其结果为 1

小议正则表达式效率 贪婪、非贪婪与回溯_正则表达式

先扫盲一下什么是正则表达式的贪婪,什么是非贪婪?或者说什么是匹配优先量词,什么是忽略优先量词? 好吧,我也不知道概念是什么,来举个例子吧. 某同学想过滤之间的内容,那是这么写正则以及程序的. 复制代码 代码如下: $str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪 看起来,好像没什么问题,其实则不然.若 复制代码 代码如下: $str = '<script<script>alert(docume