PHP中的正则表达式

前言

最近在看基础相关的东西,发现之前可以写出来的正则表达式,如今写不出来了,好比千分位格式化输出金额,用正则表达式写不出来,也只能用php提供number_format函数来解决问题。索性把这块的知识复习一下,从头开始了解,我又怕忘得太快,因而乎记在这里php

梳理正则表达式的知识点

其实学习正则表达式记住几个知识点,而后就是刷题,好比匹配手机号、身份证号、邮箱等等,经过这些案例来学习正则表达式是最好的方法,记得太多的知识点反而写不出来。废话很少说,先了解下知识点html

元字符

下面列出来了一些经常使用的元字符,具体的元字符的用法这里不在列出,了解就能够了,能够结合别人写的正则表达式回头来学习,这样记住的要更深入一些正则表达式

限定符

限定符要结合元字符一块儿使用,才能有出奇制胜的功效,具体在文章后买列举出经常使用的案例,看下它们是如何使用的sql

多选结构

多选机构在一些特定的场合下使用的比较多,好比匹配域名后缀(com|cn|hk|sg)函数

分组和引用

若是要重复一个字符呢,用小括号能够制造这么一个字符串。若是要想使用前面匹配到的结果可使用分组学习

贪婪和非贪婪

在使用重复的量词(+,*,{m,n})会尽量多的匹配字符,若是咱们不想要贪婪模式,子但愿在匹配成功的前提下使用更少的重复字符,可使用非贪婪模式3d

在匹配一些东西的时候,懒惰模式很是的有用,好比匹配标签img中的src属性值,就使用到了懒惰模式,规则就是这样/<img[\s\S]*?src="([\s\S]+?)"[\s\S]*?>/code

模式匹配优先级

元字符在匹配的时候,是有优先级的,同级优先级从左至右,其余状况以下面所示,优先级递减regexp

环视

这是正则表达式比较难理解的地方,这里我想记录着,用另一篇文章来说解一下,我要恶补一下知识,才能弄明白orm

特殊状况

在正则表达式中若是要匹配$是比较特殊的,它们两个都是元字符,在使用时必须转义因此匹配$使用的规则为\\\$

在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

总结

正则表达式的学习要结合案例,单纯的学习正则规则是没有用的,经过几个案例来学习,怎么使用,遇到的问题,这样的学习要高效不少,并且很是的实用

下面的文章我将学习正则表达式中的环视,一块儿期待

参考资料

learnku.com/articles/29…

www.cnblogs.com/tsql/p/5860…

www.zjmainstay.cn/my-regexp

deerchao.cn/tutorials/r…

相关文章
相关标签/搜索