欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP正则表达式详解

程序员文章站 2022-05-04 12:21:32
1】、定义 正则表达式是由一些特殊的符号(原符号,元子符,修正符)组成的表达式,主要是用来对字符串的分割、查找、匹配、替换等功能。 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 ......

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的匹配函数看手册基本都能看懂,所以上面没做过多介绍。