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

    正则表达式语法规则

    正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")构成的文字序列,可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

    下面的表格中列举了构成正则表达式的一些语法规则及其含义。

    1) 字符

    语法说明表达式示例匹配结果
    一般字符 匹配自身 abc abc
    . 匹配任意除换行符" "外的字符, 在 DOTALL 模式中也能匹配换行符 a.c abc
    转义字符,使后一个字符改变原来的意思;
    如果字符串中有字符 * 需要匹配,可以使用 * 或者字符集[*]。
    a.c
    a\c
    a.c
    ac
    [...] 字符集(字符类),对应的位置可以是字符集中任意字符。
    字符集中的字符可以逐个列出,也可以给出范围,如 [abc] 或 [a-c],
    第一个字符如果是 ^ 则表示取反,如 [^abc] 表示除了abc之外的其他字符。
    a[bcd]e abe 或 ace 或 ade
    d 数字:[0-9] adc a1c
    D 非数字:[^d] aDc abc
    s 空白字符:[<空格> fv] asc a c
    S 非空白字符:[^s] aSc abc
    w 单词字符:[A-Za-z0-9] awc abc
    W 非单词字符:[^w] aWc a c

    2) 数量词(用在字符或 (...) 之后)

    语法说明表达式示例匹配结果
    * 匹配前一个字符 0 或无限次 abc* ab 或 abccc
    + 匹配前一个字符 1 次或无限次 abc+ abc 或 abccc
    ? 匹配前一个字符 0 次或 1 次 abc? ab 或 abc
    {m} 匹配前一个字符 m 次 ab{2}c abbc
    {m,n} 匹配前一个字符 m 至 n 次,m 和 n 可以省略,若省略 m,则匹配 0 至 n 次;
    若省略 n,则匹配 m 至无限次
    ab{1,2}c abc 或 abbc

    3) 边界匹配

    语法说明表达式示例匹配结果
    ^ 匹配字符串开头,在多行模式中匹配每一行的开头 ^abc abc
    $ 匹配字符串末尾,在多行模式中匹配每一行的末尾 abc$ abc
    A 仅匹配字符串开头 Aabc abc
     仅匹配字符串末尾 abc abc
     匹配 w 和 W 之间 a!bc a!bc
    B [^] aBbc abc

    4) 逻辑、分组

    语法说明表达式示例匹配结果
    | | 代表左右表达式任意匹配一个,优先匹配左边的表达式 abc|def abc 或 def
    (...) 括起来的表达式将作为分组,分组将作为一个整体,可以后接数量词 (abc){2} abcabc
    (?P<name>...) 分组,功能与 (...) 相同,但会指定一个额外的别名 (?P<id>abc){2} abcabc
    <number> 引用编号为 <number> 的分组匹配到的字符串 (d)abc1 1abe1 或 5abc5
    (?P=name) 引用别名为 <name> 的分组匹配到的字符串 (?P<id>d)abc(?P=id) 1abe1 或 5abc5

    5) 特殊构造(不作为分组)

    语法说明表达式示例匹配结果
    (?:...) (…) 的不分组版本,用于使用 "|" 或后接数量词 (?:abc){2} abcabc
    (?iLmsux) iLmsux 中的每个字符代表一种匹配模式,只能用在正则表达式的开头,可选多个 (?i)abc AbC
    (?#...) # 后的内容将作为注释被忽略。 abc(?#comment)123  abc123
    (?=...) 之后的字符串内容需要匹配表达式才能成功匹配 a(?=d) 后面是数字的 a
    (?!...) 之后的字符串内容需要不匹配表达式才能成功匹配 a(?!d) 后面不是数字的 a
    (?<=...) 之前的字符串内容需要匹配表达式才能成功匹配 (?<=d)a 前面是数字的a
    (?<!...) 之前的字符串内容需要不匹配表达式才能成功匹配 (?<!d)a 前面不是数字的a

  • 相关阅读:
    《程序设计与数据结构》(上)课程总结
    20172321 2017-2018-2 《程序设计与数据结构》实验五报告
    20172321 2017-2018-2 《程序设计与数据结构》实验4报告
    20172321 2017-2018-2 《程序设计与数据结构》第11周学习总结
    暑假App
    20172314 2018-2019-1《程序设计与数据结构》查找与排序实验报告
    团队作业——第二周
    安卓游戏开发——团队作业第一周
    20172314 2018-2019-1《程序设计与数据结构》第九周学习总结
    20172314 《程序设计与数据结构》实验报告——树
  • 原文地址:https://www.cnblogs.com/marshhu/p/13883252.html
Copyright © 2011-2022 走看看