zoukankan      html  css  js  c++  java
  • PHP正则表达式

    PHP的正则表达式

    标签(空格分隔): 正则表达式 PHP


    什么是正则表达式

    正则表达式是对字符串进行操作的一种逻辑公式,就是用一些特定的字符组合成一个规则字符串,称之为正则匹配模式。

    比如:

    $p = '/apple/';
    $str = 'apple banna';
    if (preg_match($p, $str)) {
        echo 'success';
    }
    

    其中的字符串'/apple/'就是一个正则表达式,用来匹配源字符串中的apple。preg_match会返回匹配的次数0或1,因为preg_match在第一次匹配后会停止搜索,出现错误会返回false。更过的函数需参考PCRE函数

    基本语法

    在PCRE的正则语法中,正则模式使用分隔符与元字符组成。模式需要由分隔符闭合包裹。
    分隔符可以是任意非字母数字、非反斜线、非空白字符。

    经常使用的分隔符是/#以及~

    例如:

    /foo/

    [0-9]$#

    php

    如果模式中包含分隔符,则需要使用反斜线进行转义。

    /http:///

    如果模式中包含过多的分隔符,建议使用其他的字符作为分隔符,例如:

    /http:/// ====> #http://#

    或者使用preg_quote()函数对模式字符串进行转义它的第二个参数(可选)可以用于指定需要被转义的分隔符。

    $p = 'http://';
    $p = '/' . preg_quote($p, '/') . '/';
    

    除了上面提到的分隔符,也可以使用括号样式的分隔符,左括号和右括号分别作为开始和结束 分隔符。

    {http://}

    可以在结束分隔符后面增加模式修饰符。#[a-z]#i是一个大小写不敏感的匹配。

    元字符:
    元字符就是一些被赋予了特殊含义的字符。元字符有两种:

    • 一种是是可以在模式中方括号外任何地方使用的
    • 另外一种是需要在方括号内使用的。

    在方括号外使用的元字符如下:

    当使用在方括号中是不再具有特殊含义,而代表的就是其本身。[$]表示匹配$

    • 一般用于转义字符
    • ^断言目标的开始位置(或在多行模式下是行首)
    • $断言目标的结束位置(或在多行模式下是行尾)
    • .匹配除换行符外的任何字符(默认)
    • [开始字符类定义
    • ]结束字符类定义
    • |开始一个可选分支
    • (子组的开始标记
    • )子组的结束标记
    • ?作为量词,表示 0 次或 1次匹配。位于量词后面用于改变量词的贪婪特性。
    • *0次或多次匹配
    • +1次或多次匹配
    • {2}自定义匹配次数为2次,{2,}表示匹配次数不低于2次,{1,22}表示匹配次数在1-22之间

    在方括号内的部分仅有以下可用元字符:

    • 转义字符
    • [^abc]表示不是a也不是b也不是c的字符
    • 0-9标记字符0-9范围内

    反斜线定义的特殊字符含义:

    • d任意十进制数字
    • D任意非十进制数字
    • s任意空白字符
    • S任意非空白字符
    • w任意字母字符
    • W任意非字母字符

    字符类与方括号

    左方括号开始一个字符类的描述,并以右方括号结束。单独的一个右方括号没有特殊含义。
    一个字符类在目标字符串中匹配一个单独的字符;该字符必须是字符类中定义的字符集合的其中一个, 除非使用了^对字符类取反。
    例如:/[aeiou]/匹配所有的a, e, i, o, u,然而/[^aeiou]/匹配初他们之外的字符。
    在字符类中,一个中划线(-)可以用于指定从一个字符到另一个字符的范围。 比如,/[d-m]/匹配dm之间的所有字符。

    子模式与小括号
    子模式通过圆括号分隔界定,并且它们可以嵌套。
    子模式可以将可选分支局部化。比如,模式/cat(arcat|erpillar|)/匹配 catcataractcaterpillar 中的一个,如果没有圆括号的话,它匹配的则是cataracterpillar 以及空字符串。

    重复与量词
    一般的重复量词指定了一个最小数值和一个最大数值的匹配次数,通过花括号包裹两个数字,两个数字之间用逗号隔开的语法定义。 比如z{2,4}匹配zzzzzzzzz。如果第二个数字被省略,但是逗号仍然存在,就代表没有上限; 如果第二个数字和逗号都被省略,那么这个量词就限定的是一个确定次数的匹配。 比如/[a-z]{3,}/匹配至少三个连续的小写字母,但是同时也可以匹配更多,而/d{8}/只能匹配8个数字
    左花括号出现在不允许使用量词的位置或者与量词语法不匹配时,被认为是一个普通字符,对它自身进行原文匹配。比如,/{,6}/就不是一个量词,会按照原文匹配四个字符{,6}

    更多可以参见PCRE正则语法

  • 相关阅读:
    Noe4j启动警告
    SpringBoot
    MySQL数据库 java SQL语句区分大小写分析
    day24 模块的语法
    day23 re模块
    day22 常用模块02 序列化
    day21 常用模块01
    day20 面向对象06 MRO和C3算法
    day19 面向对象05 约束
    day18 面向对象04 反射
  • 原文地址:https://www.cnblogs.com/tingyugetc/p/5929447.html
Copyright © 2011-2022 走看看