【代码学习】PHP 正则表达式
一、正则表达式介绍
正则表达式是用于描述字符排列和匹配模式的一种规则,主要用于字符串的匹配、查找、替换、分割等操作
-------------------------------------------------------------------------------------------------------------------------------
二、语法规则
表达式的格式: "/表达式/[修正符]"
三、原子
1、普通字符作为原子
$pattern = '/a/'; //匹配字符中含有a的
$pattern = '/abc/'; //匹配字符中含有abc的
2、一些带有特殊符号的字符作为原子
$pattern = '/\<br\>/'; //匹配含有带<br>的字符,特殊符号前要加\
3、"通用字符类型"作为原子
$pattern = '/\d/'; //匹配任何一个数字
$pattern = '/\D/'; //匹配任何一个非数字
$pattern = '/\w/'; //匹配任何一个 数字、字母(大小写)、下划线
$pattern = '/\W/'; //匹配任何一个 非 数字、字母(大小写)、下划线
$pattern = '/\s/'; //匹配任何一个空白字符 空格 \n \r 回车 换行
$pattern = '/\S/'; //匹配任何一个非空白字符
4、自定义原子表([])作为原子
$pattern = '/[apj]sp/' //匹配[apj]中任意一个字符作为原子,asp php jsp
$pattern = '/[^apj]sp/' //匹配除了[apj]三种以外的其它字符作为原子,如xsp yhp zsp
注:原子表"[^]"可以匹配除表内的任意字符,若不在原子表内,则为边界字符
四、元字符
1、限定符(* + ? {})
$pattern = '/go*gle/'; // * 匹配前面出现的原子 0次、1次或多次,如geegle、google、gooogle
$pattern = '/go+gle/'; // + 匹配前面出现的原子 1次或多次,如google、goooooogle
$pattern = '/go?gle/'; // ? 匹配前面出现的原子 0次或1次,如ggle、gogle
$pattern = '/go{2}gle/'; // {n} 修饰前面的原子出现n次,如google
$pattern = '/go{2,}gle/'; // {n,} 修饰前面的原子至少出现n次,如google,goooogle
$pattern = '/go{2,4}gle/';// {n,m} 修饰前面的原子出现至少出现n次最多出现m次,如google,gooogle
2、边界限制(^ $)
$pattern = '/^abc/'; // ^ 匹配输入字符的开始位置,如必须以abc开头,如abc123
$pattern = '/abc$/'; // $ 匹配输入字符的结束位置,如必须以abc结尾,如123abc
$pattern = '/^abc$/'; // 只能匹配abc
3、句号(.)
$pattern = '/a.b/'; // . 匹配除换行符之外的任意一个字符,如axb,ayb,azb
(1)贪婪模式(.*?)
字符串 aa<div>test1</div>bb<div>test2</div>cc
正则表达式 <div>.*</div>
--------------------------------------------------------------
匹配内容 <div>test1</div>bb<div>test2</div>
正则表达式在匹配到第一个"</div>"时已经可以是表达式匹配成功,但是采用的是贪婪模式,会继续向右匹配,直到匹配失败为止
(2)非贪婪模式(.*?)
1 字符串 aa<div>test1</div>bb<div>test2</div>cc
2 正则表达式 <div>.*</div>
--------------------------------------------------------------
3 匹配内容 <div>test1</div>
正则表达式在匹配到第一个"</div>"时使整个表达式匹配成功,由于采用的是非贪婪模式,就结束匹配
4、模式选择符 (|)
$pattern = '/PHP|PYTHON/' // | 匹配两个或更多选择,表示可以选择PHP,也可以选择PYTHON
5、模式单元()
$pattern = '/(ab)*c/' // ()把括号内的整体作为一个原子,表示abc、ababababc
6、后向引用
$parttern = '/\d{4}(-|\/)\d{2}\\1\d{2}/' // \\1 代表第一个括号的缓冲区,也可以有多个,缓冲区编号从1开始
五、模式修正符
| 模式修正符 | 说明 |
| i | 表示在和模式进行匹配进不区分大小写 |
| m | 将模式视为多行,使用^和$表示任何一行都可以以正则表达式开始或结束 |
| s | 如果没有使用这个模式修正符号,元字符中的"."默认不能表示换行符号,将字符串视为单行 |
| x | 表示模式中的空白忽略不计 |
| e | 正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用 |
| A | 以模式字符串开头,相当于元字符^ |
| Z | 以模式字符串结尾,相当于元字符$ |
| U | 正则表达式的特点:就是比较“贪婪”,使用该模式修正符可以取消贪婪模式 |
六、与Perl兼容的正则表达式函数
1、preg_grep()
$pattern , array $input [, int $flags = 0 ] )匹配数组中的元素,返回与正则表达式匹配的数组单元
参数
pattern要搜索的模式, 字符串形式.input输入数组.flag如果设置为PREG_GREP_INVERT, 这个函数返回输入数组中与 给定模式pattern不匹配的元素组成的数组.
<?php
$list=array('zhangsan@qq.com','li@souhu.com','wangwu','zhaoliu@aa.com.cn');
//匹配邮箱
$newlist = preg_grep('/\w+@\w+(\.\w+){1,2}/',$list);
var_dump($newlist);
?>
2、preg_match_all()
$pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )匹配字符串到结尾,与preg_match()不同
参数
patter要搜索的模式,字符串形式。subject输入字符串。matches多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags指定。
<?php
//输入要匹配的字符串
$str = <<<EOF
<dd>
<div><a target="_blank" href="http://mobile.jd.com/index.do">京东通信</a></div>
<div><a target="_blank" href="http://my.jd.com/personal/guess.html">为我推荐</a></div>
<div><a target="_blank" href="http://shipingou.jd.com/">视频购物</a></div>
<div><a target="_blank" href="http://club.jd.com/">京东社区</a></div>
<div><a target="_blank" href="http://read.jd.com/">在线读书</a></div>
<div><a target="_blank" href="http://diy.jd.com/">装机大师</a></div>
<div><a target="_blank" href="http://giftcard.jd.com/market/index.action">京东E卡</a></div>
<div><a target="_blank" href="http://channel.jd.com/jiazhuang.html">家装城</a></div>
<div><a target="_blank" href="http://dapeigou.jd.com/">搭配购</a></div>
<div><a target="_blank" href="http://xihuan.jd.com/">我喜欢</a></div>
</dd>
EOF;
//匹配所有的a链接 <a href="...">...</a>
$pattern = '/<a .*? href="(.*?)">(.*?)<\/a>/';
preg_match_all($pattern,$str,$match);
var_dump($match);
?>
3、preg_replace()
$pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )preg_replace($pattern,替换成什么,原字符);
参数
pattern要搜索的模式。可以使一个字符串或字符串数组。replacement用于替换的字符串或字符串数组。subject要进行搜索和替换的字符串或字符串数组。如果subject是一个数组,搜索和替换回在subject的每一个元素上进行, 并且返回值也会是一个数组。limit每个模式在每个subject上进行替换的最大次数。默认是 -1(无限)。count如果指定,将会被填充为完成的替换次数。
<?php
//日期时间的正则表达式
$pattern = '/(\d{2})\/(\d{2})\/(\d{4})/';
//带有两个日期格式的字符串
$text = "10/01/2017到10/07/2017";
//将日期替换为以"-"分割的形式
echo preg_replace($pattern,"\${3}-\${1}-\${2}",$text);
?>
七、思维导图
【代码学习】PHP 正则表达式的更多相关文章
- PHP学习之-正则表达式
PHP学习之-正则表达式 1.什么是正则表达式 正则表达式是对字符串处理额一种逻辑公式,就是用特定的字符串组合成一个规则的字符串,称之为正则匹配模式 $p = '/apple/'; $str = '' ...
- js学习之正则表达式
js学习之正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式 一:语法 ...
- u-boot代码学习内容
前言 u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...
- 通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复、排序
通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复.排序 <?php $subject = file_get_contents('test.txt'); $pattern = '/ ...
- Objective-C代码学习大纲(3)
Objective-C代码学习大纲(3) 2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍 ...
- ORB-SLAM2 论文&代码学习 ——Tracking 线程
本文要点: ORB-SLAM2 Tracking 线程 论文内容介绍 ORB-SLAM2 Tracking 线程 代码结构介绍 写在前面 上一篇文章中我们已经对 ORB-SLAM2 系统有了一个概览性 ...
- ORB-SLAM2 论文&代码学习 —— 单目初始化
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12358458.html 本文要点: ORB-SLAM2 单目初始化 ...
- ORB-SLAM2 论文&代码学习 —— LocalMapping 线程
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12360913.html 本文要点: ORB-SLAM2 Local ...
- Learning Memory-guided Normality代码学习笔记
Learning Memory-guided Normality代码学习笔记 记忆模块核心 Memory部分的核心在于以下定义Memory类的部分. class Memory(nn.Module): ...
- 3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习
3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习 Hello小崔 华为技术有限公司 Linux内核开发 2 人赞同了该文章 LTP代码学习方法主要介绍两个步骤, ...
随机推荐
- PHP无锁内存nosql---Yac的实战
无锁内存nosql---Yac的实战 最近在工作使用了yac,所以比较了下Memcache和Yac的高并发读写性能测试,发现Yac要比Memcache快很多(这里没有比较Yac和Apc的性能情况, 不 ...
- jenkins gradle 编译遇到tomcat异常
使用gradle在jenkins 上构建的时候遇到 进行构建的时候报"Could not load Logmanager org.apache.juli.ClassLoaderLogMana ...
- python 机器学习 决策树
决策树(Decision Trees ,DTs)是一种无监督的学习方法,用于分类和回归. 优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关的特征数据缺点:可能会产生过度匹配的 ...
- BananaPi python-Mysql 操作库
BananPi python-Mysql 操作库 1.首先mysql.python环境安装 2.下载MySQL-python-1.2.3.tar.gz 并解压 tar xfz MySQL-python ...
- 用Visual Studio Code Debug世界上最好的语言
前言 这阵子因缘巧合接手了一个辣鸡项目,是用世界上最好的拍黄片写的,项目基本是另一个小伙伴在撸码,我就兼职打杂和发布做点运维的工作. 然后昨天项目上了测试版之后,一用起来Error满天飞了.让小伙伴查 ...
- Win10下 VS2017 安装失败 未能安装包“Microsoft.VisualStudio.AspNet45.Feature,version=15.0.26208.0”
事情的起因是这样的,前段时间,VS2017发布当天,想在自己的Win10上安装VS2017,然而,由于自己的系统很久没有更新(PS:自己关闭了Windows更新). 安装提示:未能安装包“Micros ...
- 如何给sublime text3安装汉化包?so easy 哦
这是我本人亲身测试过的,肯定有效,没用的话怪我咯. 首先安装package control,然后安装汉化包即可,很简单哦!!! 1.安装package control:打开sublime,使用快捷键: ...
- Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)
本节内容 前言 XML处理模块 ConfigParser/configparser模块 总结 一.前言 我们在<中我们描述了Python数据持久化的大体概念和基本处理方式,通过这些知识点我们已经 ...
- unity传送门类似效果实现
简述 在传送门中,核心的玩法是在地上或者墙上打开2个可以联通的洞来实现传送的效果.以此扩展加入解谜要素构成游戏的核心. 这里尝试使用unity来实现传送门的核心功能,具体功能分析如下: 1.传送门的模 ...
- 关于RestfulAPI与SpringMVC之间的传值
##默认读者已经搭建好的SpringMVC的环境,并且对SpringMVC有着一定的了解,并且已经对RestfulAPI有了一定的了解 1,首先将WEB-INF下的web.xml里面的url-part ...
