正则表达式详解

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

posted @ 2020-03-13 11:25  皎然CEO  阅读(602)  评论(0编辑  收藏  举报