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

    定义及用途

    正则表达式是描述字符串集的字符串。主要用于以下几个方面:

    a 验证字符串是否和正则表达式匹配

    b 在字符串中查找满足正则表达式的子串

    c 替换满足正则表达式的子串为其他

    正则表达式基本语法

    a 常量字符

        字母,数字,下划线以及没有特殊定义的符号都称之为常量字符。表达式中的常量字符,在匹配一个字符串中,匹配与之相同的一个字符串。

        例如:正则表达式bcd与目标字符串abcde,则匹配成功,匹配内容是:bcd

    b 元字符

    限定符 描述
    . 匹配除换行符以外的任意字符
    w 匹配字母,数字或者下划线的单词字符
    W 匹配任何非单词字符
    s 匹配任意空白符,包括空格,制表,换页符等
    S 匹配任意非空白字符
    d 匹配任意一个数字
    D 匹配任意一个非数字

    c 位置锚定元字符

    锚定符 描述
    ^ 待匹配的字符位于行首
    $ 待匹配字符位于行尾
     匹配单词的开始或结束,即单词边界位置
    B 匹配单词的非边界位置

    d 转义字符

    如果你想要得到元字符本身的话需要使用“”来取消这些元字符的特殊意义

    e 字符集

    使用[]方括号包含一系列字符,能够匹配其中任意一个字符。另外,可以使用“-”表示范围内的所有字符。例如:[a-z12]表示匹配所有小写字母以及数字1,2中任何一个

    使用[^]包含一系列字符,则匹配其中字符之外的任意一个字符

    f 重复限定

    语法 说明
    ? 重复0次或者1次
    * 重复0次或者多次
    + 重复一次或者多次
    {n} 重复n次
    {n,} 重复至少n次
    {n,m} 重复至少n次,但不多于m次

    正则表达式高级规则

    a 贪婪重复匹配模式

    在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数。默认总是尽可能多的匹配,对于字符串“dxxxdxxxd”,举例如下:

    (d)(w+) “w+”将匹配第一个“d”之后的所有字符“xxxdxxxd”
    (d)(w+)(d) “w+”将匹配第一个“d”和最后一个“d”之间所有字符,虽然“w+”也能够匹配上最后一个“d”,但为了使整个表达式能够匹配成功,“w+”可以“让出”它本来能够匹配的最后一个“d”

    b 非贪婪重复匹配模式

    在修饰匹配次数的特殊符号后再加一个“?”号,则可以使匹配次数不定的表达式尽可能少的匹配,也称之为“勉强模式”。针对文本“dxxxdxxxd”

    (d)(w+?) “w+?”将尽可能少的匹配“d”后面的字符,结果就是“w+?”只匹配了一个“x”
    (d)(w+?)(d) 为了让整个表达式匹配,“w+?”不得不匹配“xxx”,才可以让后边的“d”匹配,从而使得整个表达式匹配成功,因此,结果是“w+?”匹配第一个“d”和第二个“d”之间的“xxx”

    c 反向引用

    表达式在匹配时,表达式引擎会将小括号“()”包含的表达式锁匹配到的字符串记录下来,在获取匹配结果时,小括号包含的表达式所匹配到的字符串可以单独获取。在实际场合中,当用某种边界来查找,而所获得的内容又不包含边界时,必须使用小括号来指定所要的范围。例如“<html>(.*?)</html>”表达式,可以在匹配后单独把(.*?)匹配的内容提取出来。

    其实“小括号包含的表达式所匹配到的字符串”不仅可以在匹配结束后可以使用,在匹配过程中也可以使用。引用方法是”“加上一个数字。”1“引用第1个括号内匹配到的字符串。比如,正则表达式”<(w+)>.*?</1>“中的”1“表示该处匹配第一个”<>“中内容,该表达式可以用来校验<html>aa</html>等html标记是否配对,注意中间”.*?“是非贪婪模式

    d 正向预搜索与反向预搜索

    正向匹配 (?=xxx),正则表达式”windows (?=NT|XP)“在匹配”windows 98, windows NT, windows 2000“时,将只匹配”windows NT“中的”windows“,其他的”windows“匹配不上。

    正向不匹配(?!xxx),正则表达式”do(?!w)”在匹配字符串”done,do,dog“,只匹配”do“。

    反向预搜索:  匹配(?<=xxx)   不匹配(?<!xxx)

    参考资料

    正则表达式专题学习资料==推荐

  • 相关阅读:
    AcWing 204. 表达整数的奇怪方式 / Strange Way To Express Integers
    Codeforces Edu Round 67 A-C + E
    Codeforces Edu Round 66 A-E
    Codeforces Edu Round 65 A-E
    Codeforces Edu Round 64 A-D
    Codeforces Edu Round 63 A-E
    Codeforces Edu Round 62 A-E
    Codeforces Edu Round 61 A-C + F
    python 线程池和锁
    python 线程
  • 原文地址:https://www.cnblogs.com/zhouLee/p/4735611.html
Copyright © 2011-2022 走看看