php中正则案例分析
案例一如下:
$regex='/[\s\S]*/';
$str='lemon';
$matches=array(); if(preg_match($regex,$str,$matches)){
var_dump($matches);
} echo "<br/>"; $regex='/[\s\S]*?/';
$str='lemon';
$matches=array(); if(preg_match($regex,$str,$matches)){
var_dump($matches);
}
第一个正则表达式匹配到lemon
第二个为什么匹配不到?
答案:
第一个中的正则是[\s|\S]*,表示区配所有字符n次,属于贪婪模式重复区配,即尽可能多的区配字符串。所以会区配$str的所有内容。
第二个正则是[\s|\S]*?,比第一个多个个文号,?表示重复前面的0次或者一次。由于前面是*,这里*?就表示以勉强模式区配,它是尽可能的以最小的长度区配字符串,
由于*最小的是区配0次,那*?就只能区配0次了。换成+?的话就是区配1次。由于*?区配0次,所以就什么都没有了,是个长度为0的空字符串。 由上面的问题衍生出下面的疑问:
$regex='/[\s\S]*?abc/';
$str='lemonabc';
$matches=array(); if(preg_match($regex,$str,$matches)){
var_dump($matches);
}
为什么这个能匹配的到lemonabc? 答案:
这个是因为你有了截止字符abc,*?第一次开始向右区配直至找到abc开始的时候停止区配,由于你的lemonabc中包含abc,所以是去陪到abc为止,即整个字符串。
如果你的字符串是lemonabcde的话,区配的也是lemonabc,假如你的正则改成[\s|\S]*?abd的话,那区配的也是个长度为0的空字符串。因为没有找到后面的,那就区配最少的次数0次。
php中正则案例分析的更多相关文章
- Mybatis环境搭建中的案例分析 及 如果自己编写DAO接口的实现类
Mybatis环境搭建中的案例分析public static void main (String[] args) throws Exception { //读配置文件 //第一个: 使用类加载器,只能 ...
- (转)linux top命令中各cpu占用率含义及案例分析
原文:https://blog.csdn.net/ydyang1126/article/details/72820349 linux top命令中各cpu占用率含义 0 性能监控介绍 1 确定应用类型 ...
- Vue路由实现之通过URL中的hash(#号)来实现不同页面之间的切换(图表展示、案例分析、附源码详解)
前言 本篇随笔主要写了Vue框架中路由的基本概念.路由对象属性.vue-router插件的基本使用效果展示.案例分析.原理图解.附源码地址获取. 作为自己对Vue路由进行页面跳转效果知识的总结与笔记. ...
- 线程高级应用-心得7-java5线程并发库中阻塞队列Condition的应用及案例分析
1.阻塞队列知识点 阻塞队列重要的有以下几个方法,具体用法可以参考帮助文档:区别说的很清楚,第一个种方法不阻塞直接抛异常:第二种方法是boolean型的,阻塞返回flase:第三种方法直接阻塞. 2. ...
- SQL性能优化案例分析
这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...
- CSS3-3D制作案例分析实战
一.前言 上一节,介绍了基础的CSS3 3D动画原理实现,也举了一个小小的例子来演示,但是有朋友跟我私信说想看看一些关于CSS3 3D的实例,所以在这里为了满足一下大家的需求,同时也为了以后能够更好的 ...
- 个人作业-Week2 案例分析
微软必应词典客户端的案例分析 第一部分 调研,评测 1)bug: 运行平台:iOS 10.0.2 必应词典版本:4.2.2 1. bug标题:词库加载错误 bug详细描述:学习界面中的经典词库出国考试 ...
- 【MySQL】排序原理与案例分析
前言 排序是数据库中的一个基本功能,MySQL也不例外.用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐 ...
- 个人作业-Week2:案例分析
截止时间:2016年9月25日24:00. 很多同学有误解,软件工程课是否就是理论课?或者是几个牛人拼命写代码,其他人打酱油的课?要不然就是学习一个程序语言,搞一个职业培训的课? 都不对, 软件工程有 ...
随机推荐
- js如何判断小数点后有几位
<script> var n=3.143423423;alert(n.toString().split(".")[1].length); </script> ...
- volotile关键字的内存可见性及重排序
在理解volotile关键字的作用之前,先粗略解释下内存可见性与指令重排序. 1. 内存可见性 Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存,并且线程 ...
- Android RILD运行机制详解
前言 在上一篇文章里(http://blog.csdn.net/jason_wzn/article/details/53232022),简要介绍了Android RIL的架构.这一篇文章,就来看一看R ...
- Scrapyd发布爬虫的工具
Scrapyd Scrapyd是部署和运行Scrapy.spider的应用程序.它使您能够使用JSON API部署(上传)您的项目并控制其spider. Scrapyd-client Scrapyd- ...
- solr之模糊搜索(Fuzzy matching)
solr的模糊搜索主要有通配符,范围查询,近距离搜索等几类.下面分别探讨一下用法. 1. 通配符查询 通配符只是对单个term有效,对短语不起作用,ps:短语就是在查询条件上加双引号,比如 title ...
- Java内存原型分析:基本知识
转载: Java内存原型分析:基本知识 java虚拟机内存原型 寄存器:我们在程序中无法控制 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆:存放用new产生的数据 静 ...
- 收集的一些python基础教学博客
=======python3学习链接======= Python 3 教程:http://www.runoob.com/python3/python3-tutorial.html 深入python3: ...
- 21. oracle游标循环例子
事例1: create or replace procedure sp_addProjectQj( ret out number, flowid in number --流程Id) ascursor ...
- eclipse运行程序时报java.lang.OutOfMemoryError: Java heap space内存不足问题
System.setProperty("webdriver.firefox.bin", "D:\\Mozilla Firefox\\firefox.exe"); ...
- 6、SpringMVC源码分析(1):分析DispatcherServlet.doDispatch方法,了解总体流程
所有的http请求都会交给DispatcherServlet类的doDispatch方法进行处理,将DispatcherServlet.doDispatch函数的javadoc复制到下面: /* * ...