14.正则表达式
正则表达式
1.介绍正则表达式及其作用
- 简单介绍
- 正则表达式就是描述字符串排列模式的一种自定义语法规则
- 如果可以使用字符串函数完成的任务则就不要用正则表达式了
- 有一些复杂的操作,只能用正则表达式来完成
- 正则表达式也称为一种模式表达式
- 正则表达式就是通过构造具有特定规则得模式,在于输入的字符串信息进行比较,分割,匹配,查找,代替等功能
- 什么是正则表达式
- 如```/<img\s+src=".*?"/>/` ``, 这就是正则表达式
- 乱七八糟的一堆字符堆砌在一起,神秘的符号,有奇特的意义
- 正则表达式可以做什么
- 验证用户名长度
- 验证邮箱的格式
- 验证URL
- BBS编辑器
- QQ聊天表情
- 新闻采集器(小偷程序)
- 正则表达式的特点
- 正则表达式是一个字符串
- 由具有特殊意义的字符组成的字符串
- 具有一定的编写规则,也是一种模式
- 可以看看做一种编程语言,因为使用一些特殊的字符,按照规则编写出一个字符串,形成一种模式--正则表达式
- 如果正则表达式不和函数一起使用,则它就是一个普通的字符串,如果将正则表达式放在某个函数中使用,才能发挥正则表达式的作用
- PHP中提供了两套正则表达式的函数库
- posix 扩展正则表达 ereg
- perl 兼容正则表达(推荐) preg
- 正则表达式学习两点
- 正则表达式的模式的编写
- 正则表达式强大处理函数
- 正则表达式的语法
- 正则定界符
- 正则表达式中的原子(组成正则表达式的最小字符)
- 正则表达式的元字符(原子修饰符)
- 正则表达式的模式修正符
2. 正则表达式的组成(语法)
-
正则表达式的定界符
- 正则定界符就是用来声明正则表达式边界的符号,正则表达式是字符串类型.所以在定义正则表达式时要先定义字符串类型
- 正则表达式最常用的定界符是
/
,实际除字母,数字以及\
之外的字符都可以做正则表达式的边界符使用 - 注意:一个完整的正则表达式准确的说有两个边界符
- 第一个是字符串类型的引号边界符
- 第二个是正则表达式的边界符
-
正则表达式中的原子
- 什么是原子:组成正则表达式的最小单位
- 原子的组成内容
- 正常大小写字母,所有可见的字符就是原子
- 大部分不可见的字符也是原子,如空格, \n, \r, \t
- \d 表示匹配0-9之间的任意一字符
- \D 表示匹配除0-9外的任意一字符
- \s 表示匹配空白字符,包括空格, \n, \r, \t
- \S 表示匹配除空表字符外的任意一字符
- \w 表示匹配数字大小写字母以及下划线中的任意一字符
- \W 表示匹配除大小写字母,数字以及下划线之外的任意一字符
[ ]
原子列表- 表示在指定字符中选取一个字符
- [5-9]表示5,6,7,8,9连续字符,允许缩写为开始字符-结束字符
- 也可以
[0-9a-zA-Z]
[^]
排除类表(^
在[]
里边)- [^abc] 表示除了a,b,c外所有字符都可使用
.
匹配一个字节(匹配的一个字节)的字母(或其他什么).+
表示匹配匹配的所有内容
-
元字符(原子修饰符)
- 原子数量修饰符
+
表示前边的原子出现一次或多次?
表示前边的原子出现0次或1次*
表示前边的原子出现0次1次或多次{m,n}
表示前边的原子最少出现m次最多出现n次{m}
表示前边的原子出现指定m次{m,}
表示前边的原子最少出现m次及其以上
- 词边界修饰符
- 什么是词边界
- 可以分割一个单词的字符都是词边界,包括空格,标签符号,特殊字符,字符串的开始与结束,每一行的结束部分
- 不可当词边界符的部分就是字母和数字
\b
表示 词边界\B
表示非词边界
- 什么是词边界
- 字符串边界修饰符(也就是开始与结束)
^
表示以指定的字符开头的内容$
表示以指定字符结尾的内容^字符串$
表示精准匹配某个字符 多一个少一个都是错误
- 选择修饰符
|
- 模式选择单元
()
- 改变优先级
- 将多个原子视为一个原子,目的是为了使用原子数量修饰符
- 将匹配的内容暂时存在内存中
- 如果使用
()
仅仅是为了模拟一个原子使用原子数量修饰符,那么可以在括号内的开始出处使用?:
来解除存于内存的作用,提高效率(?:)
- 可以将括号的内容在函数的辅助下进行反向引用操作
- 原子数量修饰符
-
模式修正符
i
忽视(不区分)大小写x
忽略正则中的空白s
使得.
可以匹配到\n
m
视为多行处理,可以在^
与$
下匹配到\n
S
加速匹配U
改变贪婪模式- 贪婪模式: 匹配最远的结束后为止,默认打开使用
.*?
: 非贪婪模式(这时在加上U就是贪婪了)
3. 正则表达式的函数
preg_grep()
返回与模式匹配的数组单元(一维数组)-
- parameter1: 正则表达式,模式
- parameter2:要匹配的数组
- parameter3(可选): 默认0 取 1 则为取反
- 返回值: 返回与模式匹配的数组单元(下标与原1数组对应的不会重新排列)(返回与原数组一模一样的匹配的数组(包括下标))
-
preg_match
进行一次正则匹配 适合查询有没有- parameter1:正则表达式
- parameter2:要匹配的数组
- parameter3(可选);返回结果到数组里
- 返回值;没匹配到-- 0, 匹配到-- 1
preg_match_all
进行正则匹配- 获取全部的匹配内容到数组
- 适合查询有多少
preg_split
用正则进行分割字符串 (能用字符串函数的就用字符串函数)- parameter1: 正则表达式
- parameter2: 要处理的字符串
- 返回值: 分割后的数组
preg_replace
执行一个正则表达式的搜索与替换- parameter1: 正则表达式(也可以是正则数组
['//','//','//']
or array('//','//','//')) - parameter2: 替换的新内容(数组或字符串)
- parameter3: 要替换的字符串或数组
- 返回值: 新的数组
- parameter1: 正则表达式(也可以是正则数组
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~