【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 ...
随机推荐
- element中的树形组件,如何获取父级菜单的id
一般多选的树形组件,使用getCheckedNodes()方法只能获取到本级的菜单id,只有在子菜单全部选中的情况下才会选中上级.但我们想要不全选中子级的情况下也要获取它的上级,甚至上上级等,怎么办呢 ...
- 初学react
React特点: 声明式设计:建议使用JSX来描述用户界面;构建组件:单向响应的数据流: JSX:JSX是一种JAVASCRIPT的语法扩展,元素是构成react的最小单位,JSX就是用来声明REAC ...
- Oracle - 各类文件损坏处理办法(附实验步骤)
一.概述 本文将给大家介绍oracle各类文件损坏的现象和应对策略,请注意所有的恢复都是基于有备份的情况,所以请开启数据库的日常备份.文章将从以下文件展开 a. 密码文件 b. 参数文件 c. 控制文 ...
- mysqli_query($conn, "set names utf8"); //**设置字符集*** 不设置插入数据库就是乱码
mysqli_query($conn, "set names utf8"); //**设置字符集*** 不设置插入数据库就是乱码
- java 知识点总结(转)
转载自 https://www.cnblogs.com/wl310538259/p/5218251.html (一)Java 1.接口和抽象类的区别 ①抽象类里可以有构造方法,而接口内不能有构造方法. ...
- pytorch的自动求导机制 - 计算图的建立
一.计算图简介 在pytorch的官网上,可以看到一个简单的计算图示意图, 如下. import torchfrom torch.autograd import Variable x = Variab ...
- C 2016笔试题
1.下面程序的输出结果是( ) int x = 3; do { printf(“%d\n”,x -= 2); }while(!(-- x)); 分析:x初始值为3,第一次循环中运行printf函 ...
- C# datagridview 格式化单元格内容
private void dgvBig_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (dgvB ...
- 「 Offer收割机之JVM」:生存还是毁灭
这两天,广州的天气又开始热了起来,又到了小动物交配的季节,啊呸,又到了一个收割 offer 的季节.年底将至,又到了面试的高峰期,JVM 作为Java 程序员面试绕不过的一道坎儿,它又来了,你准备好了 ...
- Servlet(三)----Servlet体系与HTTP
## Servlet的体系结构 Servlet --- 接口 | | GenericServlet --- 抽象类 | | HttpServlet -- 抽象类 GenericServle ...