zoukankan      html  css  js  c++  java
  • 正则表达式 小结 经典解决方案[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

  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/2129488.html
Copyright © 2011-2022 走看看