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 (ignore):不区分大小写;

/abc/i abc abc abc
m :将字符串通过分隔符进行分割,将字符串中的每一行分别进行匹配。
s :将字符串视为一行,默认按照一行一行的匹配;
x :忽略正则表达式中的空白;
u :取消贪婪模式,第一次匹配后停止(非贪婪,默认是贪婪模式);
d: 修正 “$” 对 “\n” 的忽略;
u: 做 utf-8 中文匹配的时候使用;
g:该表达式可以进行全局匹配。

5】、常用函数

preg_match() | 进行正则表达式匹配
preg_match_all() | 进行全局正则表达式匹配
preg_replace() | 执行正则表达式的搜索和替换

工作中php其实用到的函数并不多,大多验证工作都放在前端,基本上上面3个函数完全可以搞定,具体用法可参看php官网。

 

 

说明:
1、表达式的三个主要组成部分,原符号、元字符、修正符,很多资料里的名称不统一,分类也比较混乱,上面是按我个人的理解重新做的分类。
2、php其实用到的正则匹配并不多,基本要求是会看,看到表达式能立马看出可能匹配的目标字符串是什么样的,其次是会写简单常见的表达式,碰到复杂的一般都上网搜了。
3、正则表达式非常灵活,按以上规则可组成无穷无尽的,很多跟天书似的,这是最难的,至于php的匹配函数看手册基本都能看懂,所以上面没做过多介绍。