zoukankan      html  css  js  c++  java
  • 正则表达式学习(PCRE)

    正则表达式是一个从左到右匹配目标字符串的模式。大多数字符自身就代表一个匹配 它们自身的模式。

    1.分隔符:当使用 PCRE 函数的时候,模式需要由分隔符闭合包裹。分隔符可以使任意非字母数字、非反斜线、非空白字符。

    经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)。下面的例子都是使用合法分隔符的模式。

    /foo bar/
    #^[^0-9]$#
    +php+
    %[a-zA-Z0-9_-]%

    如果分隔符需要在模式内进行匹配,它必须使用反斜线()进行转义。如果分隔符经常在 模式内出现, 一个更好的选择就是是用其他分隔符来提高可读性。
    /http:///
    #http://#

    需要将一个字符串放入模式中使用时,可以用 preg_quote() 函数对其进行 转义,它的第二个参数(可选)可以用于指定需要被转义的分隔符。

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

    {this is a pattern}
    

    可以在结束分隔符后面增加模式修饰符。 下面的例子是一个大小写不敏感的匹配:

    #[a-z]#i
    
    2.元字符
    正则表达式的威力源于它可以在模式中拥有选择和重复的能力。 一些字符被赋予 特殊的涵义,使其不再单纯的代表自己,模式中的这种有特殊涵义的编码字符 称为 元字符.

    共有两种不同的元字符:一种是可以在模式中方括号外任何地方使用的,另外一种 是需要在方括号内使用的。 在方括号外使用的元字符如下:

    一般用于转义字符
    ^
    断言目标的开始位置(或在多行模式下是行首)
    $
    断言目标的结束位置(或在多行模式下是行尾)
    .
    匹配除换行符外的任何字符(默认)
    [
    开始字符类定义
    ]
    结束字符类定义
    |
    开始一个可选分支
    (
    子组的开始标记
    )
    子组的结束标记
    ?
    作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。 (查阅量词)
    *
    量词,0 次或多次匹配
    +
    量词,1 次或多次匹配
    {
    自定义量词开始标记
    }
    自定义量词结束标记
    模式中方括号内的部分称为“字符类”。 在一个字符类中仅有以下可用元字符:
    转义字符
    ^
    仅在作为第一个字符(方括号内)时,表明字符类取反
    -
    标记字符范围

    3.转义序列(反斜线)

    反斜线有多种用法。首先,如果紧接着是一个非字母数字字符,表明取消 该字符所代表的特殊涵义。这种将反斜线作为转义字符的用法在字符类 内部和外部都可用。

    比如,如果你希望匹配一个 "*" 字符,就需要在模式中写为 "*"。 这适用于一个字符在不进行转义会有特殊含义的情况下。 但是, 对于非数字字母的字符,总是在需要其进行原文匹配的时候在它前面增加一个反斜线, 来声明它代表自己,这是安全的。如果要匹配一个反斜线,那么在模式中使用 ”\”。

    Note:

    反斜线在单引号字符串和双引号字符串 中都有特殊含义,因此要匹配一个反斜线, 模式中必须写为 ”\\”。 译注: “/\/”, 首先它作为字符串,反斜线会进行转义, 那么转义后的结果是//,这个才是正则表达式引擎拿到的模式, 而正则表达式引擎也认为 是转义标记,它会将分隔符 / 进行转义, 从而得到的是一个错误,因此,需要 4 个反斜线才可以匹配一个反斜线。

     

    4.锚

  • 相关阅读:
    C# 开发Chrome内核浏览器(WebKit.net)
    SQL 存储过程语句拼接愁人的时间类型
    Linux简介
    揭秘Node.js深受欢迎的原因
    6个强大的AngularJS扩展应用
    ElasticSearch NEST
    web中的各种打印方案
    配置问题总结
    leetcode -day29 Binary Tree Inorder Traversal & Restore IP Addresses
    HBase高速导入数据--BulkLoad
  • 原文地址:https://www.cnblogs.com/perseverancevictory/p/4260926.html
Copyright © 2011-2022 走看看