• 正则表达式 小结 经典解决方案[1]


    目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。

    正则表达式是用来匹配一类字符串的一种模式

    正则表达式的功能:字符串的查找、替换以及分割

    应用领域广泛

    PerlPHPJavaC++C#Python Xpath.Net

    JavaScriptJscript

    OracleMysqlUnixLinux

    正则语法:

    正则表达式主要组成:

          1 原子(普通字符,如英文字符)

          2 元字符(有特殊功用的字符)

          3 模式修正字符(对正则表达式语义的修正)

    一个正则表达式中至少包含一个原子。

    ===========华丽的分割线=======================

    1 原子

    原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。

    原子字符包括所有的英文字母、数字、标点符号以及其他一些符号。原子也包括以下内容。

                   单个字符、数字,如a~zA~Z0~9

             模式单元,如(ABC)可以理解为由多个原子组成的大的原子。

             原子表,如 [ABC]

             重新使用的模式单元,如:\\1

            普通转义字符,如:\d \D \w

             转义元字符,如:\*\.

    2 元字符

    元字符是用于构造规则表达式的具有特殊含义的字符。如果要在正则表达式中包含元字符本身,必须在其前加上”\”进行转义                                                      

    元字符                       说明

    .                                    匹配除换行之外的任何一个字符

    *                                   0次、1次或多次匹配其前的原子

    +                                   1次或多次匹配其前的原子

    ?                                   0次或1次匹配其前的原子

    |                                   匹配两个或多个选择

    ^   \A                            匹配字符串串首的原子

    $   \Z                           匹配字符串串尾的原子

    \b                                 匹配单词的边界

    \B                        匹配除单词边界以外的部分

    []                                   匹配方括号中的任一原子

    [^xyz]                          匹配除方括号中的原子外的任何字符

    {m}                      表示其前原子恰好出现m

    {m,n}                           表示其前原子至少出现m次,至少出现n(n>m)

    {m,}                    表示其前原子出现不少于m

    ()                                   整体表示一个原子

    3 模式修正字符

    PCRE表达式中的最后一个分隔符/后,可以添加模式修正符,扩展了正则表达式在字符匹配、替换操作时的某些功能,修正增强了正则表达式的处理能力。模式修正符一般标记于整个模式之外,并且可以组合使用,如“/apple/i”、“/cat|dog/uis”等。

             模式修正符                                 说明

                       i                  -可同时匹配大小写字母

                       s                 -将字符串视为单行,换行符做普通字符看待,使“.”匹配任何字符

                       m               -将字符串视为多行

                       x                 -模式中的空白忽略不计

                       S                 - 当一个模式将被使用若干次时,先对其进行分析 

                       U                -匹配到最近的字符串

                       e                -将替换的字符串作为表达使用

    ============================华丽分割线==========================

    原子说明

    --------------------------------------------------------------------------------

    \d               匹配一个数字;等价于[0-9]

    \D              匹配除数字以外任何一个字符;等价于[^0-9]

    \w              匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]

    \W             匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_]

    \s               匹配一个空白字符;等价于[\f\n\r\t\v]

    \S               匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v]

    \n               匹配一个换行符;等价于 \x0a \cJ

    \r               匹配一个回车符等价于\x0d \cM

    \t               匹配一个制表符;等价于 \x09\\cl

    \f                匹配一个换页符等价于 \x0c \cL

    \v               匹配一个垂直制表符;等价于\x0b\ck

    \oNN           匹配一个八进制数字

    \xNN           匹配一个十六进制数字

    \cC             匹配一个控制字符


    例如,在字符串“Tom and Jerry chased each other in the house until toms uncel come in”中

    元字符“^”或“\A 置于字符串的开始确保模式匹配出现在字符串首端;

    /^Tom/

    元字符“$”或“\Z 置于字符串的结束,确保模式匹配出现字符串尾端。

    /in$/         

    如果不加边界限制元字符,将获得更多的匹配结果。

    /^Tom$/精确匹配            /Tom/模糊匹配

    例如:在字符串“This island is a beautiful land”中

    元字符“\b”对单词的边界进行匹配;

    /\bis\b/    匹配单词“is”,不匹配“This”和“island”。

    /\bis/        匹配单词“is”和“island”中的“is”,不匹配“This

    元字符“\B”对除单词边界以外的部分进行匹配。

    /\Bis\B/    将明确的指示不与单词的左、右边界匹配,只匹配单词 的内部。所以在这个例子中没有结果。

    /\Bis/        匹配单词“This”中的“is

  • 相关阅读:
    [译]ASP.NET 5 Configuration
    loopback文档翻译
    [译]Testing Node.js With Mocha and Chai
    [译]在Node中使用indicative来验证model
    机器学习:计算机学习西洋跳棋
    OpenCV成长之路(10):视频的处理
    OpenCV成长之路(9):特征点检测与图像匹配
    OpenCV成长之路(8):直线、轮廓的提取与描述
    OpenCV成长之路(7):图像滤波
    OpenCV成长之路(6):数学形态学基本操作及其应用
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/2129488.html
Copyright © 2020-2023  润新知