【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 ...
随机推荐
- Ansible-免密登录与主机清单Inventory
Ansible的指定用户与密码登录.免密登录.指定ssh端口以及主机清单Inventory配置 在实际使用中并不需要对ansible配置进行修改,或者说只有需要的时候才修改ansible配置. 添加用 ...
- LeetCode 136、137、260(只出现一次的数,异或性质及应用)
First. 陈列一下“异或”的一些性质 异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1. 它与布尔运算的区别在于,当运算符两 ...
- Docker深入浅出系列 | Swarm多节点实战
目录 前期准备 Swarm基本概念 什么是Docker Swarm 为什么要用Swarm Swarm的网络模型 Swarm的核心实现机制 服务发现机制 负载均衡机制Routing Mesh Docke ...
- React && ReactDOM
如果你是 React 的初学者,一定会对 React 和 ReactDOM 感到迷惑.为什么要分成两个包呢?害得我还要引入两次,说好的减轻开发人员负担呢,这丫的在搞什么飞机.带着这个疑问,我们一起来康 ...
- 推荐两款好用的JS格式化工具
工具一: 直接在Chrome浏览器中,F12,打开Sources栏,找到JS文件,点击下面的花括号即可. 工具二: 使用notepad++ 格式化JS文件. 1.下载 jstool 插件(https: ...
- 【简说Python WEB】Flask应用的文件结构
目录 [简说Python WEB]Flask应用的文件结构 1.文件结构的目录 2.配置程序--config.py 3.app应用包 4.剥离出来的email.py 5.蓝本(BLueprint)的应 ...
- [剑指offer]14-1.剪绳子
14-1.剪绳子 方法一 动态规划 思路:递归式为f(n)=max(f(i), f(n-i)),i=1,2,...,n-1 虽然我现在也没有彻底明白这个递归式是怎么来的,但用的时候还是要注意一下.f( ...
- 使用@property 添加width 和 height 属性
@property Python内置的@property装饰器就是负责把一个方法变成属性调用的: class Screen(object): def isint(self,px): if not is ...
- 概率-拒绝采样 Rejection Sampling
2018-12-09 16:40:30 一.使用Rand7()来生成Rand10() 问题描述: 问题求解: 这个问题字节跳动算法岗面试有问到类似的,有rand6,求rand8,我想了好久,最后给了一 ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式2
这一篇,我们主要来学习一下私有属性和方法以及模块模式. 三.私有属性和方法 JavaScript并没有特殊的语法来表示私有.保护.或公共属性和方法,在这一点上与Java或其他语言是不同的.JavaSc ...