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、行边界
    ^表示“匹配开始行”,$表示“匹配结束行”。
    ^$表示“匹配空行”。
    ^.*$将会匹配整个文本,因为换行符是一个字符,所以.会匹配它。为了匹配单行,要使用惰性乘法器,^.*?$。

  • 相关阅读:
    Find the Smallest K Elements in an Array
    Count of Smaller Number
    Number of Inversion Couple
    Delete False Elements
    Sort Array
    Tree Diameter
    Segment Tree Implementation
    Java Programming Mock Tests
    zz Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    Algorithm about SubArrays & SubStrings
  • 原文地址:https://www.cnblogs.com/xiwang6428/p/9247292.html
Copyright © 2011-2022 走看看