设为首页 收藏本站
查看: 823|回复: 0

[经验分享] PHP正则表达式学习笔记

[复制链接]

尚未签到

发表于 2017-4-3 06:04:06 | 显示全部楼层 |阅读模式
  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代码就是xxx
在最终用户画面,程序会将UBBCode转换成HTML代码,这样避免了直接输入HTML代码所带来一些不良后果
  UBBCode就是一种模式匹配和替换技术
  比如在论坛中就用到了这种技术

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359299-1-1.html 上篇帖子: Java和PHP一致的DES编码 下篇帖子: PHP 多参数方法的重构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表