php正则表达式中贪婪与非贪婪的示例分析
小编给大家分享一下php正则表达式中贪婪与非贪婪的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一、贪婪与非贪婪
什么叫贪婪,比如说要从字符串中
我们来看看正则里面是怎么贪婪的
面包一面包二 ';preg_match('/(.*)<\/td>/',$str,$res);print_r($res); 结果:
Array
(
[0] =>面包一 面包二
[1] => 面包一面包二
)0记录的是整个字符,1表示的是第一次匹配。
怎么来限制贪婪?
面包一面包二 ';preg_match('/(.*?)<\/td>/',$str,$res);print_r($res);Array ( [0] => 面包一 [1] => 面包一 )
在修饰匹配次数的特殊符号后再加上一个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配。
在PHP中还可以通过修饰符来实现,
面包一面包二 ';preg_match('/(.*)<\/td>/U',$str,$res);print_r($res); 结果和上面一样。这就是修饰符U的作用
二、预搜索
预搜索是一个非获取匹配,不进行存储供以后使用。
1、正向预搜索 "(?=xxxxx)","(?!xxxxx)"
"(?=xxxxx)":所在缝隙的右侧,必须能够匹配上 xxxxx 这部分的表达式,
结果:
Array
(
[0] => windows
)这个是xp前面的windows,不会取NT和2003前面的。
格式:"(?!xxxxx)",所在缝隙的右侧,必须不能匹配 xxxxx 这部分表达式
结果:
Array
(
[0] => Array
(
[0] => windows 这个是nt前面的
[1] => windows 这个是2003前面的
))
从这里可以看出,预搜索不进行存储供以后使用。
与会存储的对比下。
结果:
Array
(
[0] => Array 全部模式匹配的数组(
[0] => windows N
[1] => windows 2
)[1] => Array 子模式所匹配的字符串组成的数组,通过存储取得。
(
[0] => N
[1] => 2
))
2、反向预搜索 "(?<=xxxxx)","(?
"(?<=xxxxx)" :所在缝隙的 "左侧"能够匹配xxxxx部分。
结果:
Array
(
[0] => 56789012
)匹配除了前4个数字和后4个数字之外的中间8个数字
"(?结果:
Array
(
[0] => 234567890123456
)三、preg和ereg的区别
PHP同时使用两套正则表达式规则,一套是由电气和电子工程师协会(IEEE)制定的POSIX Extended 1003.2兼容正则(事实上PHP对此标准的支持并不完善),另一套来自PCRE(Perl Compatible Regular Expression)库提供PERL兼容正则。 PHP5.3开始POSIX被删除了。
preg_match 比 ereg效率高。
以上是"php正则表达式中贪婪与非贪婪的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
面包 贪婪 结果 正则 表达式 搜索 所在 缝隙 存储 字符 数字 篇文章 示例 分析 内容 右侧 字符串 数组 模式 次数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中国网络技术实力 壕鑫互联网络科技 绵阳网络安全教育 高青管理软件开发公司 软件开发计算思维基础 数据库进程的安全怎么支撑 网络安全 岗位说明书 网络安全工作责任分工 网络安全国防经费 软件开发工作室是做什么 网络安全与信息化研究生就业 php软件开发经理招聘信息 修改标题服务器繁忙请稍后再试 数据库写入中文的类型 什么是最早的软件开发模型 潮州专业软件开发费用是多少 sql连接数据库字符串函数 数据库集群技术 概述 计算机网络技术课程诊改 docker容器中创建数据库 网络技术7个要点 lucene如何搜索数据库数据 前五网络安全隐私 用access数据库比对 网络安全组队名称 数据库培训实训小结 广州视频安防软件开发报价 如何将软件所有数据库拷到硬盘 标签机怎么使用数据库打印 sql数据库 圆圈箭头相关文章