【PHP学习笔记(四)】正则表达式

此篇可以和Java的正则表达式一起学习,参见这篇文章

正则表达式的语法规则

一般情况下,正则表达式由两个部分组成,分别是元字符和文本字符。元字符就是有特殊含义的字符,如”?”和”*”等;文本字符就是普通的文本,如字母、数字等

方括号 []

  • 方括号内的一串字符是将要用来进行匹配的字符。例如[abc],表示在目标字符串中寻找字母a、b、c

连字符 –

  • 在很多情况下, 不可能逐个列出所有的字符。比如,若要匹配所有英文字符,把26个英文字母全部输入很麻烦,因此可以采用连字符简单表示
  • [a-z]:表示匹配英文小写a~z的任意字符
  • [A-Z]:表示匹配英文大写A~Z的任意字符
  • [A-Za-z]:表示匹配英文任意大小写字符
  • [0-9]:表示匹配0-9的任意十进制数
  • 由于字母和数字的区间固定,还可以自定义开始-结束区间,例如[1-8]、[g-m]

点号字符 .

  • 通配符,可代表所有字符和数字

限定符 +*?{n,m}

  • +表示其前面的字符至少有一个。例如,9+表示目标字符串至少有一个9
  • *表示其前面的字符有不止一个或0个。例如,y*表示目标字符串中含有不止一个y或没有y
  • ?表示其前面的字符有一个或0个。例如,y?表示目标字符串中含有一个y或没有y
  • {n,m}表达其前面的字符含有n个或m个。例如,a{3,5}表示目标字符串含有3个a或5个a,a{3}表示目标字符串含有3个a,a{3,}表示目标字符串至少含有3个a
  • .和*一起使用表示广义匹配,即.*表示匹配任意字符

行定位符 ^和$

  • 行定位符用来确定匹配字符串所要出现的位置,^表示出现在目标字符串开头的位置,$表示出现在目标字符串结尾的位置。例如^abc表示abc只能出现在目标字符串的开头,abc$表示abc只能出现在目标字符串的结尾
  • 同时使用两个符号为特殊表示,例如^[a-z]$表示目标字符串只包含a~z的单个字符

排除字符 [^]

  • 表示逻辑否,排除匹配字符串在目标字符串中出现的可能。例如,[^0-9]表示目标字符串中不能出现0~9之间任意字符

括号字符()

  • 括号字符()表示子串,所有对包含在子串内字符的操作,都是以子串为整体进行的,也是把正则表达式分成不同部分的字符

选择字符 |

  • 表示或选择,例如:abc|de|fg|ok 表示目标字符串包含abc或de或fg或ok

转义字符和反斜杠

  • \在正则表达式中属于特殊字符,所以如果单独使用此字符,则将直接表示为作为特殊字符的转移字符。如果要表示反斜杠字符本身,则应该在此字符的前面添加转义字符\,即为\\

认证Email的正则表达式

  • 在处理表单数据的时候,对于E-mail进行认证是十分常用的
  • 判断E-mail地址的正则表达式语法格式:^[A-Za-z0-9_.]+@[A-Za-z0-9_]+\.[A-Za-z0-9_]+$
    • ^[A-Za-z0-9_.]+表示开头至少有一个英文大小写、数字、下划线和点号,或者这些字符的组合
    • @表示E-mail中的@
    • [A-Za-z0-9_]+表示至少有一个英文大小写、数字、下划线,或者这些字符的组合
    • \.表示E-mail中的.,即.163、.gmail的点号
    • [A-Za-z0-9_]+$表示结尾至少有一个英文大小写、数字、下划线,或者这些字符的组合

Perl兼容正则表达式函数

在PHP中有两类正则表达式函数:一是Perl兼容正则表达式函数,;二是POSIX扩展正则表达式函数。二者差距不大,推荐使用前者

使用正则表达式对字符串进行匹配

  • preg_match(正则表达式,目标字符串,[ 数组]):在目标字符串中寻找符合特定正则表达规范的字符串子串,数组为可选参数,存储匹配结果的数组,此函数匹配一次成功后就会停止匹配
  • preg_match_all(正则表达式,目标字符串,[ 数组]):在目标字符串中寻找符合特定正则表达规范的字符串子串,数组为可选参数,存储匹配结果的数组,此函数会一直匹配到目标字符串结尾
  • 例如要再目标字符串中匹配“When”,则正则表达式的写法为:”/When/”或者”/When/i”,后者表示不区分大小写

使用正则表达式替换字符串的子串

  • preg_replace(正则表达式,欲取代字符串子串,目标字符串,[替代的个数]):如果省略替代的个数或者替代的个数为-1,则所有的匹配项都会被替换

使用正则表达式切分字符串

  • strtok(目标字符串,正则表达式):以正则表达式出现的字符为准,把目标字符串切分成若干个子串并且存入数组

人已赞赏
Java编程语言

【Java学习笔记(六)】Java中的常用类库&String类

2020-3-24 22:28:33

Java编程语言

【Java学习笔记(三-1)】Java中变量的比较方法

2020-3-25 20:05:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索