【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 ...
随机推荐
- <字符串匹配>KMP算法为何比暴力求解的时间复杂度更低?
str表示文本串,m表示模式串; str[i+j] 和 m[j] 是正在进行匹配的字符; KMP的时间复杂度是O(m+n) , 暴力求解的时间复杂度是O(m*n) KMP利用了B[0:j]和A[i ...
- [android]R.class里有ID,onCreate方法里调用findViewById返回空
在做android练习,一个新手错误,记录一下: 在练习android权威编程指南时,第5章 第二个Activity部分练习,出现标题问题,代码还原如下: protected void onCreat ...
- Button相关设置
2020-03-11 每日一例第4天 1.添加按钮1-6,并修改相应的text值: 2.窗体Load事件加载代码: private void Form1_Load(object sender, Ev ...
- anconda添加镜像源
# anaconda 安装镜像源 *** 在使用安装 conda 安装某些包会出现慢或安装失败问题,最有效方法是修改镜 像源为国内镜像源. 之前都选用清华镜像源,但是2019年 ...
- Python下载各种功能包出问题
问题详情 点击之后出现 AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader' 解决方法 c ...
- Java内部类的四种分类以及作用介绍
内部类内容解析 内部类的区分 内部类分别有成员内部类.局部内部类.匿名内部类.静态内部类,接下来将分别介绍. 成员内部类 就是位于外部类成员位置的类.与外部类的属性.方法并列. 成员内部类作为外部类的 ...
- iOS开发:UIColor转成纯色图片(UIImage)
Objective-c 版本 UIKIT_EXTERN UIImage * __nullable UIColorAsImage(UIColor * __nonnull color, CGSize si ...
- 题解 P2642 【双子序列最大和】
前言 其实这道题的关键就是在于预处理,其方法类似于 合唱队形 正文 求最大子段和 要想求出双子序列最大和,首先我们要会求出最大子段和 最大子段和的求值方法很简单 定义 \(f_i\) 为以第 \(i\ ...
- 动态规划-Cherry Pickup
2020-02-03 17:46:04 问题描述: 问题求解: 非常好的题目,和two thumb其实非常类似,但是还是有个一点区别,就是本题要求最后要到达(n - 1, n - 1),只有到达了(n ...
- CentOS7 部署 Hadoop 3.2.1 (伪分布式)
CentOS: Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 ...