多数大学生出来选择的工作和专业无关
首页 > 专业知识

PHP正则表达式的语法怎么实现

时间:2017-03-01 16:59:22 [来源]:郑州PHP培训学校

  PHP正则表达式的语法怎么实现
  正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。正则表达式有三个作用:1、匹配,也常常用于从字符串中析取信息;2、用新文本代替匹配文本;3、将一个字符串拆分为一组更小的信息块。本文将详细介绍PHP中的正则表达式基础语法
  [注意]关于javascript的正则表达式的详细信息移步至此
  历史
  在PHP中有两套正则表达式函数库,两者功能相似,只是执行效率略有差异:一套是由PCRE(Perl Compatible Regular Expression)库提供的,使用“preg_”为前缀命名的函数;另一套由POSIX(Portable Operating System Interface of Unix)扩展提供的,使用以“ereg_”为前缀命名的函数PCRE来源于Perl语言,而Perl是对字符串操作功能最强大的语言之一,PHP的最初版本就是由Perl开发的产品。PCRE语法支持更多特性,比POSIX语法更强大在PHP4之前,主要使用POSIX;而现在,则使用主流的PCRE正则表达式作为一个匹配的模式,是由原子(普通字符,例如字符a到z)、特殊字符(元字符,例如*、+和?等)、以及模式修正符三部分组成的文字模式
  定界符
  定界符常使用反斜线“/”,如“/apple/”。用户只要把需要匹配的模式内容放入定界符之间即可。作为定界的字符也不仅仅局限于“/”。除了字母、数字和斜线“\”以外的任何字符都可以作为定界符,像“#”、“|”、“!”等都可以的
  /<\/\w+>/              --使用反斜线作为定界符合法
  |(\d{3})-\d+|Sm        --使用竖线”|”作为定界符合法
  !^(?i)php[34]!         --使用竖线”!”作为定界符合法
  /href=‘(.*)’           --非法定界符,缺少结束定界符
  1-\d3-\d3-\d4|         --非法定界符,缺少起始定界符
  如果分隔符需要在模式内进行匹配,它必须使用反斜线进行转义。如果分隔符经常在模式内出现, 一个更好的选择就是是用其他分隔符来提高可读性
  /http:\/\//
  #http://#
  元字符
  正则表达式的威力源于它可以在模式中拥有选择和重复的能力。 一些字符被赋予特殊的涵义,使其不再单纯的代表自己,模式中的这种有特殊涵义的编码字符称为元字符
  共有两种不同的元字符:一种是可以在模式中方括号外任何地方使用的,另外一种是需要在方括号内使用的
  【1】在方括号外使用的元字符如下:
  复制代码
  \ 一般用于转义字符
  ^ 断言目标的开始位置(或在多行模式下是行首)
  $ 断言目标的结束位置(或在多行模式下是行尾)
  . 匹配除换行符外的任何字符(默认)
  [ 开始字符类定义
  ] 结束字符类定义
  | 开始一个可选分支
  ( 子组的开始标记
  ) 子组的结束标记
  ? 作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性
  * 量词,0 次或多次匹配
  + 量词,1 次或多次匹配
  { 自定义量词开始标记
  } 自定义量词结束标记
  复制代码
  [注意]在字符类外部,模式中的句点.匹配目标字符串中的任意字符,包括非打印字符, 但是默认不包括换行符。如果PCRE_DOTALL被设置,句点就会匹配换行符
  【2】模式中方括号内的部分称为“字符类”。 在一个字符类中仅有以下可用元字符:
  \ 转义字符
  ^ 仅在作为第一个字符(方括号内)时,表明字符类取反
  - 标记字符范围
  反斜线
  反斜线有多种用法。首先,如果紧接着是一个非字母数字字符,表明取消该字符所代表的特殊涵义。这种将反斜线作为转义字符的用法在字符类内部和外部都可用
  比如,如果希望匹配一个 "*" 字符,需要在模式中写为"\*"。这适用于一个字符在不进行转义会有特殊含义的情况下。但是,对于非数字字母的字符,总是在需要其进行原文匹配的时候在它前面增加一个反斜线,来声明它代表自己,这是安全的。如果要匹配一个反斜线,那么在模式中使用 ”\\”
  反斜线在单引号字符串和双引号字符串中都有特殊含义,因此要匹配一个反斜线,模式中必须写为 ”\\\\”
  [注意] “/\\/”, 首先它作为字符串,反斜线会进行转义, 那么转义后的结果是/\/,这个才是正则表达式引擎拿到的模式,而正则表达式引擎也认为\是转义标记,它会将分隔符/进行转义,从而得到的是一个错误,因此,需要4个反斜线才可以匹配一个反斜线
  反斜线的第二种用途提供了一种对非打印字符进行可见编码的控制手段。除了二进制的0 会终结一个模式外,并不会严格的限制非打印字符(自身)的出现,但是当一个模式以文本编辑器的方式编辑准备的时候,使用下面的转义序列相比使用二进制字符会更加容易

上一篇:PHP面向对象该怎么理解

下一篇:PHP的缓存技术实现方式有哪些