`

PHP正则表达式学习笔记

阅读更多

Last Update 2009-9-7

学习视频:LAMP兄弟连   主讲:高洛峰   PHP 正则表达式

 

一、概述

1.定义:正则表达式是用于描述字符排列模式的一种语法规则
2.作用:用于字符串的模式分割,匹配,查找,替换
同样的功能如果能用字符串函数处理,就使用字符串函数处理(效率高)
一些复杂的功能则可以借助正则表达式来完成

 

3.PHP中正则表达式都是由
正规字符   abcd....  123456.....
特殊字符   () ? ^ $.....  类似通配符

联合构成的一个文本模式,呈现的一个描述

 

4.以“匹配”为例——学习模式如何定义(重点)

 

(1)PHP提供了两套正则表达式函数库
执行功能相似,执行效率不同

PCRE(Perl)风格     以preg_开头的函数  (执行效率高一些)
POSIX风格           以ereg_开头的函数

 

(2)模式包含在两个斜线之间  /模式..../
除了数字,字母和正斜线之外 任何字符都可以作为定界符
如:#模式....#   通常使用/.../


(3)其它功能:

分割的应用  expole  只能按单个分割

如计算文章中有多少句话   将所有标点符号写成模式,文章遇到标点就分割开


查找的应用
如果 一个文章中所有的以a开头  以b开头的

 

替换的应用
全文替换,文章中所有有网址地方都加上<a>链接

 

二、模式书写方法

1.正则表达式主要由正规字符和特殊字符组成

2.又可以细划分为
原子:(普通)字符 如:英文字符,数字

元字符:(有特殊功能用途的字符)

模式修正字符(i,u,s,x)

 

三、分别介绍上述三类

1.原子

一个正则表达式至少要有一个原子组成,组成正则表达式的基本单位

所有英文字符,数字,标点符号及其它符号
单个字符:a-z A-Z 0-9 
模式单元:多个原子组成的一个大原子 如:(abc)
原子表:[abc]  放在[]存放的一组原子,彼此地位平等,只匹配其中的一个原子
如果原子表中存在 ^  表示排除原子表

转义字符:
\d  匹配一个数字 0-9   [0-9]
\D  匹配除数字以外的任何一个字符  [^0-9]
\w  匹配一个英文字母,数字或下划线  [0-9a-zA-Z_]
\W  匹配除一个英文字母,数字或下划线外的任何一个字符[^0-9a-zA-Z_]

\s  匹配一个空白字符(包含如下字符,都可以匹配出来)[\f\n\r\t\v]

\f  匹配一个换页字符
\n  匹配一个换行字符
\r  匹配一个回车字符
\t  匹配一个制表符
\v  匹配一个垂直制表符

\S匹配除空白符以外的任何一个字符   [^\f\n\r\t\v]

\oNN 匹配一个八进制数
\xNN 匹配一个十六进制数

 

2.元字符
用于构成正则表达式的具有特殊功能用途的字符
如:* + ? . | ^ $
*:0次或者1次或者多次匹配其前的原子   /go*/
+:1次或多次匹配其前的原子  /go+/
?:0次或1次匹配其前的原子
.:匹配除换行符外任何一个字符,相当于linux:[^\n] windows:[^\n\r]  如:/go.gle/
|:或    匹配两个或多个选择
^:匹配字符串串首的原子
$:匹配字符串串尾的原子
\b:匹配单词的边界     如:/is\b/      边界:如空格
\B: 匹配单词边界以外的部分
{m}:表示其前原子恰好出现m次

{m,n}:表示其前的原子出现至少m次,最多出现n次


{m,}:表示其前的原子出现不少于m次

():表示将里面内容整体表示一个原子  如:(abc) 作为一个独立单元使用   如:/dog+/  和 /(dog)+/
一个独立单元将将被优先匹配

系统将自动将这些模式匹配单元依次存储起来,用\1取出第一次存储的 \2取出第二次存储的 依次类推

 

3.模式修正符——对正则表达式的扩展,增强了正则表达式的处理能力

模式匹配的顺序通常是由 左到右依次匹配

 

  优先级
模式单元() 1
重复匹配? * + {}   2
边界限制^ $ \b \B   3
模式选择  4

 

模式修正符标记在整个模式之外  如 /abc/i

i  不区分大小写的匹配
m  将字符串视为多行
s  将字符串视为单行,换行符作为普通字符
x  将模式中的空白忽略
e
A
D
U  匹配到最近的字符串
S

参考PHP手册  目录: Perl 兼容正则表达式函数->模式修正符

 

四、PHP提供的两套正则表达式函数——参考PHP手册
preg_match()      只匹配第一个
preg_match_all()  所有匹配模式的都会放到数组中
preg_grep()

 

替换  preg_replace()
与字符串替换函数str_replace的区别
比如:有整数的地方 替换成大写字母M,当数字不同的时候,就可以用正则表达式来替换


分割 preg_split()

 

五、正则表达式实例应用

UBBCode转义
UBBCode使用类似于HTML的数据方式  比如<b>xxx</b>在UBBCode代码就是[b]xxx[/b]
在最终用户画面,程序会将UBBCode转换成HTML代码,这样避免了直接输入HTML代码所带来一些不良后果

 

UBBCode就是一种模式匹配和替换技术

比如在论坛中就用到了这种技术

 

分享到:
评论

相关推荐

    php正则表达式学习笔记

    php正则表达式学习笔记分享: 1.创建正则表达式 $regex = ‘/\d/i’; 与JavaScript中的第一个方式有点像,只是这里的话是个字符串。  2.正则表达式中的特殊字符 特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! &lt; ...

    PHP 笔记001 - 字符串、正则表达式

    关于学习PHP中字符串与正则表达式的学习笔记、心得,如果需要就下载吧

    php 正则表达式学习笔记

    最近在学习正则,一些比较有用的东西怕忘记,记下来,比较乱,想一条记录一条:

    (正则表达式)学习笔记

    NULL 博文链接:https://huagenli.iteye.com/blog/506304

    PHP正则表达式笔记与实例详解

    本文实例讲述了PHP正则表达式笔记与实例。分享给大家供大家参考,具体如下: 这里主要介绍如何在PHP使用正则表达式,并附带几个实例. 这两天工作用到了正则表达式,发现自己已经忘记的差不多了,囧啊!找来以前的学习...

    PHP学习笔记总结.doc

    五、 字符串和正则表达式 六、 PHP专题相关 七、 PHP常用API分类汇总 八、 MVC框架及模板 九、 PHP网站部署及安全 十、 PHP网站常见模块(非框架版) 十一、 PHP网站常见模块(TP框架版) 十二、 用PHP+Mysql构造...

    自己学正则时做的笔记,其实正则也不难哦 php

    正则表达式 1.匹配符 1)头匹配符”^”:如^0754,只匹配开头为0754的字符串 2)尾匹配符”$”:如0754$,只匹配结尾为0754的字符串 3)全字匹配:将^和$结合,如^0754$,匹配0754字符串 2.转义字符 1)空字符: 换行\n 回车\r ...

    reading-notes:读书笔记

    reading-notes 读书笔记 常识 PHP各版本的生命周期 学习资源 ...正则表达式 十二因子应用程式 程序员编写技术文档的新手指南 阿里实习offer五面经验与总结 如何正确配置Nginx和PHP 唯品会的订单分库

    java8集合源码-fanspaceshow.github.io:学习笔记

     正则表达式 MiniDao 技术贴 [removed][removed] [removed] $(function(){ var pdfArr = $("a.pdf-name"); var urlStart = "generic/web/viewer.html?file="; pdfArr.each(function(index,element){ var aLabel = $...

    思库教育PHP零基础培训+进阶课程+PHP项目开发实战 21G PHP零基础学习视频教程.txt

    │ │ └笔记.doc │ ├ │ │ ├[思库教育]第25集 斐波纳挈数列.mp4 │ │ └[思库教育]第26集 数组的遍历.avi │ ├ │ │ ├[思库教育]第27集 猴子吃桃.avi │ │ ├[思库教育]第28集 杨辉三角.avi │ │ ├[思库...

Global site tag (gtag.js) - Google Analytics