正则表达式详解
1】、定义
正则表达式是由一些特殊的符号(原符号,元子符,修正符)组成的表达式,主要是用来对字符串的分割、查找、匹配、替换等功能。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
2】、作用
1、查找某个字符串中是否具有某个表达式组成的字符串(表单内的各种验证)
如:验证邮箱 qweqwe123ad@qq.com @ .
2、使用某些字符串替换原字符串中符合正则的字符;(正则的字符串替换)
$str1 = “这pian文章是个好文章,他讲述了PHP的原理”
$str2 = '<a href="www.php.com">PHP</a>'
preg_replace('/PHP/', $str2, $str1)
3、取出某些字符串中符合正则的子字符串(小偷程序,采集程序)
火车头
4、url_rewrite (url地址重写)
3】、分类
PHP同时使用两套正则表达式规则,一套是由电气和电子工程师协会(IEEE)制定的POSIX Extended 1003.2兼容正则(事实上PHP对此标准的支持并不完善),检索速度慢,Windows下不可以使用,函数以 ereg_xxx() 开头;
另一套来自PCRE(Perl Compatible Regular Expression)库提供PERL兼容正则,检索速度快,函数以 preg_xxx()开头。
综上,实际只需掌握第二套即可。
4】、组成
【界定符】 一般 / 或 # 或 ~
【原符号】 最基本的字符,用来匹配字符串中的内容
【元子符】 修饰原符号
【修正符】 修饰整个表达式
【原符号】:最基本组成单元,而且在每个模式中最少要包含一个原子
按是否简写分:
非简写,又可分为下面三类:
1、普通原子 0-9、a-z、包括汉字,但汉字一般用Unicode编码代替:\u4E00-\u9FA5
2、特殊字符作为原子,需使用转义符 \ ,包括:{} | [] () . ? + \ ^ $ *
3、非打印字符簇,包括:
\f 分页
\n 换行
\r 回车
\t 制表符水平
\v 垂直制表符
简写类:
\d:代表一个0-9的数字
\D: 反之,代表一个不是0-9的字符 //匹配非纯数字
\s: 匹配一个空格字符串
\S: 匹配一个非空格字符串
\w: 匹配一个字母,数字和下划线
\W: 匹配除数字,字母,下划线以外的任意一个字符
. : 匹配任意一个字符(除换行符 \n 外)
【元子符】: 用于修饰原符号
1)、| 管道操作符,表示或的意思
/1|2|3|4|5|6|7|8|9|0/ ===/\d/ === [0-9]
2)、[]:取一定范围的普通字符的一些字符作为正则模式的原子
[a-z] a-z中的任何字符
[0-9a-zA-Z_] 匹配的所有的普通字符
3)、量词:修饰原字符的个数
+ : >=1 一个或一个以上的原子
* : >=0 0个或者0个以上的原子
? : 0或者1 0个或者一个原子
有边界限定的时候
{n}: =n 恰好出现 n 次
{n,} >=n 至少出现连续的 n次原子
{n,m} >=n <=m 出现次数是n到m次的
4)、():代表中间的字符是一个整体或后向引用
/.*(abc){2,3}.*/ abcabc
5)、行定位符,针对整个字符串而言
^:表示字符串开始处
abcdefg
/^a/ :字符串中以a开头
$:表示字符串的结尾处
/(ddd)$/ :以ddd结尾的模式 (com)$
6)、[^]: 取反,排除字符
/[^a]/:只要字符串中出现一个不是a的其他字符就符合
/[^a-d]/:只要字符串中出现一个不是a、b、c、d的其他字符就符合
/[^a]d/ : 只要匹配一个 xd,x不能为a
/[^a-d]{3}/
/[^(a|b|c)]d/ 排除ad,bd,cd外的其他字符
【修正符】:用来修饰整个正则表达式,在结束的界定符后面
i PCRE_CASELESS 忽略大小写
m PCRE_MULTILINE 将字符串当成多行处理,默认是单行,只有字符串中包含"\n"和 ^$起作用
s PCRE_DOTALL 设置后,. 可匹配换行符"\n"
U PCRE_UNGREEDY 取消贪婪模式
x PCRE_EXTENDED 忽略模式中的空白数据,包括空格符、tab
A PCRE_ANCHORED 必须以这个模式开头
D PCRE_DOLLAR_ENDONLY 修正 $ 对 "\n" 的忽略
u PCRE_UTF8 匹配utf8字符
5】、常用函数
preg_match() | 进行正则表达式匹配
preg_match_all() | 进行全局正则表达式匹配
preg_replace() | 执行正则表达式的搜索和替换
工作中PHP其实用到的函数并不多,大多验证工作都放在前端,基本上上面3个函数完全可以搞定,具体用法可参看PHP官网。
6】、常用正则表达式
1、表单输入框只输入数字
onkeyup="value=this.value.replace(/[^\d.]/g,'')"
说明:
1、表达式的三个主要组成部分,原符号、元字符、修正符,很多资料里的名称不统一,分类也比较混乱,上面是按我个人的理解重新做的分类。
2、PHP其实用到的正则匹配并不多,基本要求是会看,看到表达式能立马看出可能匹配的目标字符串是什么样的,其次是会写简单常见的表达式,碰到复杂的一般都上网搜了。
3、正则表达式非常灵活,按以上规则可组成无穷无尽的,很多跟天书似的,这是最难的,至于PHP的匹配函数看手册基本都能看懂,所以上面没做过多介绍。
作者:皎然CEO
链接:https://www.cnblogs.com/jiaoran/p/12485271.html
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦(っ•̀ω•́)っ✎⁾⁾!