前言
最近在看基础相关的东西,发现以前能够写出来的正则表达式,现在写不出来了,比如千分位格式化输出金额,用正则表达式写不出来,也只能用php提供number_format函数来解决问题。索性把这块的知识复习一下,从头开始了解,我又怕忘得太快,于是乎记在这里
梳理正则表达式的知识点
其实学习正则表达式记住几个知识点,然后就是刷题,比如匹配手机号、身份证号、邮箱等等,通过这些案例来学习正则表达式是最好的方法,记得太多的知识点反而写不出来。废话不多说,先了解下知识点
元字符
下面列出来了一些常用的元字符,具体的元字符的用法这里不在列出,了解就可以了,可以结合别人写的正则表达式回头来学习,这样记住的要更深刻一些
限定符
限定符要结合元字符一起使用,才能有出奇制胜的功效,具体在文章后买列举出常用的案例,看下它们是如何使用的
多选结构
多选机构在一些特定的场合下使用的比较多,比如匹配域名后缀(com|cn|hk|sg)
分组和引用
如果要重复一个字符呢,用小括号可以制造这么一个字符串。如果要想使用前面匹配到的结果可以使用分组
贪婪和非贪婪
在使用重复的量词(+,*,{m,n})会尽可能多的匹配字符,如果我们不想要贪婪模式,子希望在匹配成功的前提下使用更少的重复字符,可以使用非贪婪模式
在匹配一些东西的时候,懒惰模式非常的有用,比如匹配标签img中的src属性值,就使用到了懒惰模式,规则就是这样/<img[\s\S]*?src="([\s\S]+?)"[\s\S]*?>/
模式匹配优先级
元字符在匹配的时候,是有优先级的,同级优先级从左至右,其他情况如下面所示,优先级递减
环视
这是正则表达式比较难理解的地方,这里我想记录着,用另外一篇文章来讲解一下,我要恶补一下知识,才能弄明白
特殊情况
在正则表达式中如果要匹配$是比较特殊的,它们两个都是元字符,在使用时必须转义所以匹配$使用的规则为\\\$
在PHP中正则表达式必须放在单双号引号中,不能像JS那样单独出现,而\
在单引号中是转义字符,所以必须把规则中的\
再次转义,得到\\\\\\$
,也就是所匹配$需要使用6个\
和一个$
在双引号中$
有特殊的含义,需要对其转义后才能使用,得到\\\\\\\$
总结一下,正则表达式和引号中的特殊字符都得转义,为了避免特殊字符需要转义,强烈建议使用单引号
案例
- 匹配整数: /^-?\d+$/
- 匹配正整数: /^[1-9]\d*$/
- 匹配两位小数: /^\d+\.\d{2}$/
- 匹配11位的手机号: /^1\d{10}$/
- 匹配身份证号: /^(?:\d{15}|\d{17}[\dxX])$/
- 匹配邮箱账号: /^[\w\-]+@(?:\w+\.)+\w+$/
- 匹配IP地址: /^((25[0-5]|2[0-4]\d|[1-9]\d{0,2})\.){3}(25[0-5]|2[0-4]\d|[1-9]\d{0,2})$/
- 匹配URL: /^(?:https?:\/\/)?(?:[\w-]+\.)+[a-zA-Z]+$/
- 匹配img标签src属性值: /<img[^>]+?src="([^"]+)"/
- 匹配js标签src属性值: /<img[^>]+?src="([^"]+)"/
- 匹配中文: /[\u4e00-\u9fa5]+/u
总结
正则表达式的学习要结合案例,单纯的学习正则规则是没有用的,通过几个案例来学习,怎么使用,遇到的问题,这样的学习要高效很多,而且非常的实用