zoukankan      html  css  js  c++  java
  • 正则表达式学习笔记

    该笔记内容通过《Learn regular expressions in about 55 minutes》整理得到。

    文章链接:https://qntm.org/files/re/re.html

    其中文翻译很多,中文名叫:55分钟学会正则表达式。

    实际上我也算过了,55分钟实在不太可能,也许我比较笨……

    正则表达式:由只代表自身的字面值和代表特定含义的元字符组成

    规则
    1、任何元字符如果用一个反斜杆进行转义就会变成字面值;
    2、正则表达式是区分大小写;

    元字符
    1、句点(英文句号).:表示匹配任何单个字符。

    2、反斜杠:将元字符进行转义成字面值,其本身也可以转义,写成\。

    3、字符类[]:表示找到集合里任意一个字符,比如[aeiou]表示任意一个方括号内的字符。[a]和a意义相同。另外字符类中顺序和重复字符不重要。
    注意:句点.在字符类中表示其本身,即句点。

    3.1、字符类连字符-:表示一个字符类的区间,如[b-f]和[bcdef]同意思。

    3.2、表示否定的插入符^:在字符类最开始位置使用此字符来否定一个字符类。如[^a-zA-Z0-9]表示“找到一个非字母也非数字的字符”。

    3.3、d表示[0-9],w表示[0-9A-Za-z_],s表示“匹配任意空白字符(空格,tab,回车或者换行);这些如果换成大写则取反意。D同[^0-9],W同[^0-9A-Za-z_],S表示“匹配任意不是空白符的字符”。

    3.4、句点、大括号在字符类内只代表其字面。

    4、乘法器:在一个字面值和字符类后面用大括号。
    如:a{1}同a,表示“匹配一个a”;
    a{3}表示“找到一个a后再跟一个a,最后找到一个a”;
    a{0}表示“匹配空字符”。
          4.1、乘法器区间:
            colou{0,1}r表示“匹配colour或color”;
            a{3,5}表示“匹配aaaaa或aaaa或aaa”
            乘法器是贪婪的,如文本是I had an aaaaawful day,该正则表达式就会在aaaaawful中匹配到aaaaa。不会在第三个a后就停止匹配。
            区间也可以是开区间:
            a{1,}表示“在一列中找到一个或多个a”;
            .{0,}表示“匹配任何情形”。不管你的输入文本是什么——甚至为空——这个正则表达式都会匹配整个字符串然后返回给你。
         4.2、乘法器补充:
             ?等于{0,1},代表空字符或任意1个字符;
             *等于{0,},代表空字符或任意1个或多个字符;
             +等于{1,},代表任意1个或多个字符;
             注意:?*+在字符类内代表其字面意思。

    5、惰性
    原则上来说如果有多种匹配结果,那么优先会寻找更多字符的字串。可在乘法器后追加问号实现惰性,让优先顺序反转,例:
    d{4,5}?表示“匹配dddd”或“ddddd”。其实跟d{4}一致。
    ".*"表示找到一个双引号然后再找到尽可能多的字符再跟一个双引号,但.*匹配的内部字符很可能包含多个双引号,这时只要写成: ".*?"则表示“匹配一个双引号,并跟着尽可能少的字符再跟着一个双号号。
    6、分支符|
    cat|dog表示:匹配cat或dog;
    red|blue|表示:匹配red或blue或空字符;
    [cat|dog]表示:匹配c,a,t,d,o,g,|任一字符。
    7、组合符()
    在一周中找到一天,使用(Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day
    ()表示“匹配一个左圆括号后,再匹配一个右圆括号”
    8、单词边界
    单词边界是一个单词字符和非单词字符之间的位置。正则表达式表示“匹配一个单词边界”。
    www表示“匹配一个三个字母的单词”
    9、行边界
    ^表示“匹配开始行”,$表示“匹配结束行”。
    ^$表示“匹配空行”。
    ^.*$将会匹配整个文本,因为换行符是一个字符,所以.会匹配它。为了匹配单行,要使用惰性乘法器,^.*?$。

  • 相关阅读:
    [BZOJ1013][JSOI2008]球形空间产生器sphere 高斯消元
    [Luogu1848][USACO12OPEN]书架Bookshelf DP+set+决策单调性
    [BZOJ1025][SCOI2009]游戏 DP+置换群
    [BZOJ1024][SCOI2009]生日快乐 搜索
    [BZOJ2002][Hnoi2010]Bounce弹飞绵羊 LCT
    「BZOJ 4565」「HAOI 2016」字符合并「区间状压DP」
    「BZOJ 5161」最长上升子序列「状压DP」
    「SPOJ TTM 」To the moon「标记永久化」
    「学习笔记」字符串大礼包
    「CF724G」Xor-matic Number of the Graph「线性基」
  • 原文地址:https://www.cnblogs.com/xiwang6428/p/9247292.html
Copyright © 2011-2022 走看看