• !!!最常用正则表达式语法


      本文摘要翻译了几篇文章的内容,简单介绍 ATL CAtlRegExp,GRETA,Boost::regex 等正则表达式库,这些表达式库使我们可以方便地利用正则库的巨大威力,给我们的工作提供了便利。

      

    1. 正则表达式语法
    字符元 意义
    . 匹配单个字符
    [ ]

    指定一个字符类,匹配方括号内的任意字符。例:[abc] 匹配 "a", "b"或 "c"。

    如果要匹配方括号,则使用 "(\\[)" 或 [\\]]

    ^ 如果^出现在字符类的开始处,它否定了字符类,这个被否定的字符类匹配除却方括号内的字符的字符。如:[^abc]匹配除了"a", "b"和"c"之外的字符。如果^出现在正则表达式前边,它匹配输入的开头,例:^[abc]匹配以"a", "b"或"c"开头的输入。
    - 在字符类中,指定一个字符的范围。例如:[0-9]匹配"0"到"9"的数字。
    ? 指明?前的表达式是可选的,它可以匹配一次或不进行匹配。例如: [0-9][0-9]? 匹配"2"或"12"。
    + 指明?前的表达式匹配一次或多次。例如:[0-9]+匹配"1", "13", "666"等。

    *

    指明*前的表达式匹配零次或多次。
    ??, +?, *? ?, +和*的非贪婪匹配版本,它们尽可能匹配较少的字符;而?, +和*则是贪婪版本,尽可能匹配较多的字符。例如:输入"<abc><def>", 则<.*?> 匹配"<abc>",而<.*>匹配"<abc><def>"。
    ( )  分组操作符。例如:(\d+,)*\d+匹配一串由逗号分开的数字,例如: "1"或"1,23,456"。
    \ 转义字符,转义紧跟的字符。例如,[0-9]+ 匹配一个或多个数字,而 [0-9]\+ 匹配一个数字后跟随一个加号的情况。反斜杠\也用于表示缩写,\a 就表示任何数字、字母。如果\后紧跟一个数字n,则它匹配第n个匹配群组(从0开始),例如,<{.*?}>.*?</\0>匹配"<head>Contents</head>"。注意,在C++字符串中,反斜杠\需要用双反斜杠\\来表示: "\\+", "\\a", "<{.*?}>.*?</\\0>"。
    $ 放在正则表达式的最后,它匹配输入的末端。例如:[0-9]$匹配输入的最后一个数字。
    | 间隔符,分隔两个表达式,以正确匹配其中一个,例如:T|the匹配"The" 或"the"。


     


       2。 缩写匹配

    缩写 匹配
    \a 字母、数字([a-zA-Z0-9])
    \b 空格(blank): ([ \\t]),另一说为 匹配单词的开始或结束
    \c 字母([a-zA-Z])
    \d 十进制数 ([0-9])
    \h 十六进制数([0-9a-fA-F])
    \n 换行: (\r|(\r?\n))
    \q 引用字符串(\"[^\"]*\")|(\''''[^\'''']*\'''')
    \w 一段文字 ([a-zA-Z]+)
    \z 一个整数([0-9]+)
    \s 匹配任意的空白符
    ^ 匹配字符串的开始
    $ 匹配字符串的结束
    . 匹配除换行符以外的任意字符
      匹配任意的空白符
      匹配字符串的开始

    3.常用的重复限定符

    表2.常用的限定符
    代码/语法说明
    * 重复零次或更多次
    + 重复一次或更多次
    ? 重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次

     

     

     

     

    可以用小括号来指定子表达式(也叫做分组),

    4。 命名捕获组+平衡组

        你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+ 这部分正则式(zcl:匹配一行的第一个单词)的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,

    • (?'group') 把捕获的内容命名为group,并压入堆栈(Stack)
    • (?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
    • (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
    • (?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
    • [.?!]匹配标点符号(.或?或!)

    (?!exp) 匹配后面跟的不是exp的位置 

    表4.常用分组语法

    分类 代码/语法  说明

    捕获    (exp)      匹配exp,并捕获文本到自动命名的组里

          (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

          (?:exp)     匹配exp,不捕获匹配的文本,也不给此分组分配组号

    零宽断言  (?=exp)    匹配exp前面的位置

          (?<=exp)    匹配exp后面的位置

          (?!exp)     匹配后面跟的不是exp的位置

          (?<!exp)    匹配前面不是exp的位置

    注释    (?#comment)  这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

    普通捕获组在大多数支持正则表达式的语言或工具中都是支持的,而命名捕获组目前只有.NET、PHP、Python等部分语言支持,据说Java会在7.0中提供对这一特性的支持。可以采用(\i, zcl:斜杠+索引号)调用扑获组索引号的方式引用扑获组

  • 相关阅读:
    一起谈.NET技术,.Net Discovery系列之深入理解平台机制与性能影响(下) 狼人:
    一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(十二)魔法系统 狼人:
    一起谈.NET技术,.Net Discovery系列之深入理解平台机制与性能影响 (中) 狼人:
    一起谈.NET技术,再次分享一个多选文件上传方案 狼人:
    一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统 狼人:
    一起谈.NET技术,.NET中的异步编程 IO完成端口以及FileStream.BeginRead 狼人:
    一起谈.NET技术,C#中标准Dispose模式的实现 狼人:
    一起谈.NET技术,DotNet并行计算的使用误区 狼人:
    一起谈.NET技术,.NET中的委托 狼人:
    一起谈.NET技术,ASP.NET MVC3 基础教程 – Web Pages 1.0 狼人:
  • 原文地址:https://www.cnblogs.com/carl2380/p/2295712.html
Copyright © 2020-2023  润新知