【php】正则表达式
一、生活当中的正则表达式:
a)Notepad++、word等这些具有编辑功能的软件,都具有一个查找、替换的功能,这个功能,其实就属于正则模式的一种匹配、替换;包括windows当中可以实现的查找,也是应用的正则模式匹配;包括一些搜索、匹配的软件也是使用的正则模式规则来写的!
二、PHP当中的正则:
a)定义:它是用于对使用一种模式,对一段字符串进行的查找、替换、匹配、分割的作用
三、正则模式:
a)其实就是一段特殊的字符串!我们可以使用这一段特殊的字符串对另一段字符串进行的一系列操作!
b)模式:
i.单身模式:找女朋友,学习,充实自己!
ii. 恋爱模式:此刻仉浩焱和他的女朋友在热恋期,此时他们的智商都为0
iii.婚姻模式:此刻仉浩焱和他的女朋友结婚啦,从此过上了幸福的生活!
iv.侦查模式:此时他媳妇的智商仅次于爱因斯坦,她会从仉浩焱的蛛丝马迹发现海波是不是偷腥了~~(头发丝儿、身上是否有香水味、是否有口红…)
四、正则的分类:
a)POSIX规则:
i.已弃用,(功能、使用频率)比较落后,因此弃用
b)PCRE规则:
i.正在使用!
五、如何来使用正则表达式?
a)正则的定界符:
b)原子:
c)元字符:
d)模式修正符:
e)配合正则函数来进行使用!
i.Preg_match() 匹配一次
ii.Preg_match_all() 匹配所有
六、定界符:
a)和定义字符串一样,我们定义正则也需要使用正则的定界符
b)“/正则模式/” ,正则当中的定界符可以是除了字母、数字、具有特殊含义符号之外的所有内容,都可以作为定界符
c)注意:通常情况下,我们都会使用双斜线作为正则模式的定界符,这是一个不成文的规定!
七、 原子:是正则模式当中最小的单位!
a) 普通字符:
1. a-z:之中的所有小写字母,都是一个原子
2. A-Z:之中的所有大写字母,都是一个原子
3. 0-9:之间的所有阿拉伯数字,都属于一个原子
b) 原子表:
1. []:一个方括号当中所有的内容之间的关系都是或的关系,而且一个原子表永远代表一个原子!
2. [abcdfg]:可以写单个原子
3. [a-z]:任一一个小写字母
4. [A-Z]:任一一个大写字母
5. [0-9]:任一一个阿拉伯数字
6. [a-g]:任一一个从a-g之间的小写字母
7. 原子表中如果有一个 ‘-’代表了一个范围!
c) 特殊的转义字符:
1. \d:相当于[0-9],代表了任意一个阿拉伯数字
2. \D:代表了任一一个除了阿拉伯数字的内容
3. \w:代表了任意一个字母、数字、下划线的内容
4. \W:代表了除了任意的字母、数字、下划线的内容
d) 非打印字符:
1. \r:回车
2. \n:换行
3. \t:制表符
e) 正则当中拥有特殊含义的字符:
1. *、.、+、?、\,当我们想要使用正则模式去匹配这些具有特殊含义的字符时,我们需要在它前方加上转义字符 \
八、 元字符:在正则表达式当中,那些拥有特殊含义的字符,就是元字符
a) []:原子表,特点:原子表中的原子之间的关系是或,一个原子表代表一个原子
b) {n}:匹配次数:花括号之前的原子必须出现n次
c) {n,}:匹配次数:花括号之前的原子至少出现n次,没有上限
d) {n,m}:匹配次数:花括号之前的原子至少出现n次,最多出现m次
e) .:代表任意一个原子
f) *:匹配次数:代表*号之前的原子是任意长度,相当于{0,}
g) +:匹配次数:代表+号之前的原子是至少一次,没有上限,相当于{1,}
h) ?:匹配次数:代表?号之前的原子可有可无,相当于{0,1}
i) ^:两层含义
i. 如果将其放在正则模式左定界符后,则代表以^之后的原子开头
ii. 如果将其放在原子表中最开头,[^0-9],则代表原子表中的内容取反
j) $:如果将其放在正则模式右定界符前,则代表以$符之前的原子结尾
i. 注意:如果配合使用上箭头^和美元符号$,则代表精确匹配,代表我们匹配的字符源必须符合他们中间的正则模式的内容!
k) ():三层含义:
i. 提升优先级
ii. 子存储
iii. 重复使用模式单元
l) |:或者
九、 关于正则模式的特殊运用:
a) 贪婪匹配
// 定义字符源
$stu = '#仉浩焱##许超##张舒##大嘴##小花##伟哥#'; // 定义正则模式(这属于贪婪匹配)
$patt = "/#.*#/";
var_dump($res); //结果
array (size=1)
0 =>
array (size=1)
0 => string '#仉浩焱##许超##张舒##大嘴##小花##伟哥#' (length=51) // 定义正则模式(拒绝贪婪匹配)
$patt = "/#.*?#/"; // 使用正则函数来进行匹配
preg_match_all($patt,$stu,$res);
var_dump($res); //结果
array (size=1)
0 =>
array (size=6)
0 => string '#仉浩焱#' (length=11)
1 => string '#许超#' (length=8)
2 => string '#张舒#' (length=8)
3 => string '#大嘴#' (length=8)
4 => string '#小花#' (length=8)
5 => string '#伟哥#' (length=8)
b) 子存储
c) 重复使用模式单元
十、 正则当中的函数:
a) Preg_match()、 执行一个正则表达式匹配
//定义字符源
$str = "abcdefgabcdefg"; //定义正则模式
$patt = "/a/"; echo preg_match($patt,$str,$res);
var_dump($res);
//array (size=1)
//0 => string 'a' (length=1)
b) Preg_match_all()、 执行一个全局正则表达式匹配
//定义字符源
$str = "abcdefgabcdefg"; //定义正则模式
$patt = "/a/"; //匹配所有
preg_match_all($patt,$str,$res);
var_dump($res); //array (size=1)
0 =>
array (size=2)
0 => string 'a' (length=1)
1 => string 'a' (length=1)
c) Preg_grep(); 返回匹配模式的数组条目
d) Preg_replace(); 执行一个正则表达式的搜索和替换
e) Preg_split(); 通过一个正则表达式分隔字符串
十一、 正则当中的模式修正符:
a) i:不区分大小写
//模式修正符i:表示正则匹配不区分大小写
$str = "abcdefgABCDEFG";
$patt = "/[a-z]/i";
preg_match_all($patt,$str,$res);
var_dump($res); //结果
array (size=1)
0 =>
array (size=14)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length=1)
3 => string 'd' (length=1)
4 => string 'e' (length=1)
5 => string 'f' (length=1)
6 => string 'g' (length=1)
7 => string 'A' (length=1)
8 => string 'B' (length=1)
9 => string 'C' (length=1)
10 => string 'D' (length=1)
11 => string 'E' (length=1)
12 => string 'F' (length=1)
13 => string 'G' (length=1)
b) s:表示忽略换行符
//模式修正符s:表示正则匹配忽略换行符
$str = "
<li>张三</li>
<li>李四
</li>
<li>王五</li>
"; //不加模式修正符s
$patt = "/<li>.*?<\/li>/";
preg_match_all($patt,$str,$res);
var_dump($res); //结果
array (size=1)
0 =>
array (size=2)
0 => string '<li>张三</li>' (length=15)
1 => string '<li>王五</li>' (length=15) //加模式修正符s
$patt = "/<li>.*?<\/li>/s";
preg_match_all($patt,$str,$res);
var_dump($res); //结果
array (size=1)
0 =>
array (size=3)
0 => string '<li>张三</li>' (length=15)
1 => string '<li>李四
</li>' (length=20)
2 => string '<li>王五</li>' (length=15)
c) U:表示拒绝贪婪匹配
//模式修正符U:表示正则拒绝贪婪匹配
$str = "#海波##鸿泽##柏岩##景飞#";
$patt = "/#.*#/U";
preg_match_all($patt,$str,$res);
var_dump($res); //结果
array (size=1)
0 =>
array (size=4)
0 => string '#海波#' (length=8)
1 => string '#鸿泽#' (length=8)
2 => string '#柏岩#' (length=8)
3 => string '#景飞#' (length=8)
十二、 关于正则和字符串函数:
a) 正则函数就相当于大炮:
b) 字符串函数就相当于弓箭:
【php】正则表达式的更多相关文章
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- C# 正则表达式大全
文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...
- C#基础篇 - 正则表达式入门
1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...
- JavaScript正则表达式,你真的知道?
一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- 【JS基础】正则表达式
正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...
- JavaScript 正则表达式语法
定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...
- [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)
数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
随机推荐
- computed 里面 不能写箭头函数 都要写 function () {} 否则页面会都不显示
computed 里面 不能写箭头函数 都要写 function () {} 否则页面会都不显示
- annaconda的安装及使用
一.安装 1.安装包下载: 方式1:官网:https://www.anaconda.com/distribution/ 方式2:清华镜像源:https://mirrors.tuna.tsinghua. ...
- CentOs安装配置Jenkins(一)
安装 RPM方式安装 #如果下列版本不是您需要的版本,可以到清华镜像站点查找自己需要的jenkins版本rpm地址 #清华镜像网址:https://mirrors.tuna.tsinghua.edu. ...
- ADO.NET 的使用(一)
一.ADO.NET概要 ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类. ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件. 它提供了对关系数据.X ...
- 如何获取主键返回值(MySQL、Oracle)
添加用户.返回主键 --场景:在执行新增用户sql后,service层返回新增用户的主键值(与mybatis一起使用) insert into user(username, sex, birthday ...
- Android Studio Run/Debug configuration error: Module not specified
如下图,配置时没有module可选,因此报错error: Module not specified 解决方法: 1.打开根目录的settings.gradle,删除include ':app' 2.在 ...
- Django实现简单的用户添加、删除、修改等功能
一. Django必要的知识点补充 1. templates和static文件夹及其配置 1.1 templates文件夹 所有的HTML文件默认都放在templates文件夹下. 1.2 stati ...
- 最简易 Pair of Topics解决方法
这个题花费了我两天的时间来解决,最终找到了两个比较简单的方法 首先这个题不难看出是寻找a[i]+a[j]<0的情况,我第一开始直接用两个for循环遍历通过不了,应该是复杂度太大了 第一个方法 # ...
- ASP.NET MVC升级到ASP.NET Core MVC踩坑小结
写在前面 ASP.NET Core是微软新推出的支持跨平台.高性能.开源的开发框架,它的优势不必多说,因为已经说得太多了.当然,现在依然有着数量庞大的系统运行于.NET Framework上,由于有大 ...
- 搭建Hadoop集群需要注意的问题:
搭建Hadoop集群需要注意的问题: 1.检查三台主机名是否正确 2.检查三台IP是否正确 3.检查 /etc/hosts 映射是否正确 4.检查 JDK和Hadoop 是否安装成功(看环境变量配置) ...