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

    本文学习总结linux系统下的正则表达式;本文总结了朱双印的正则表达式成果。传送门

     


    正则表达式总结:

     


    一、匹配“行”:

    ---- 匹配行首字符串:“^” ; 举例: grep --color "^hello" re.txt //匹配以“hello”开头的行;

    ---- 匹配行尾字符串:“$”; 举例: grep --color "hello$" re.txt //匹配以 "hello"结尾的行;

     


    二、匹配“词”:

    ---- 匹配“词首”:"  或者 < ";
    ---- ---- 举例: grep --color "hello" re.txt //匹配以hello开头的单词;

    ---- 匹配“词尾”:"  或者 > ";
    ---- ---- 举例: grep --color "hello>" re.txt //匹配以hello结尾的单词;

    ---- 匹配“单词”:" 或<> " ; //匹配完整单词 ;
    ---- ---- 举例:grep --color "" re.txt // 匹配单词hello;


    ---- 匹配“非单词边界”(字符边界)(非词首): " B "(含义:包含字符串,但不在词首);
    ---- ---- 举例:grep "Bhello" re.txt //匹配单词包含hello,但hello不在词首;

    ---- 匹配“非单词边界”(非词尾):" B "(含义:包含字符串,但不在词尾);
    ---- ---- 举例:grep "helloB" re.txt //匹配单词包含hello,但hello不在词首;

    ---- 说明:" B = [^] " // ^此符号含义为“非”;B 是以单个“字符”为边界;证。

    -------- 举例:grep "BerB" re.txt // 匹配er既不在词首也不再词尾的字符串。匹配never,不匹配ever,eraser;

     


    三、连续次数匹配:

    ---- 匹配字符连续出现n次的行: " {n} "
    ---- ---- 举例:grep "m{3}" re.txt //匹配m连续出现3次的行;

    ---- 匹配字符连续出现多次的行:" {n,m} ";//大括号之前的字符至少连续出现n次,最多连续出现m次。
    ---- ---- 举例:grep "o{2,3}" re.txt // 匹配字母o连续出现至少2次至多3次的行;

    ---- 连续出现的字符上不封顶:" {n,} " //至少出现n次;
    ---- ---- 举例: grep "o{3}" re.txt // 匹配至少连续出现3次o的行;

    ---- 连续出现的字符至多m次: " {,m} "
    ---- ---- 举例:grep "o{,3}" re.txt //匹配字符o出现0次~3次的行;

    ---- 匹配 *前字符 连续出现 任意次数(含0次):" * " ;
    ---- ---- 举例: grep "o*" re.txt //匹配o连续出现任意次数,含0次;

    ---- 匹配任意长度的字符串:" .* "
    ---- ---- 举例: grep "o.*" re.txt //匹配含有o的任意字符串;

    ---- 匹配任意单个字符: “ . ”
    ---- ---- 举例: grep "x.x" re.txt //匹配3个字符两边是x,中间是任意字符;

    ---- 前面的字符出现0次或1次:“ ? ”// 前面字符至多出现1次;
    ---- ---- 举例: grep "a?" re.txt // 匹配a至多出现一次的行;

    ---- 前面字符至少出现1次,多了不限:“ + ” //前面的字符至少出现一次;
    ---- ---- 举例: grep "u+" re.txt //匹配u至少出现1次的行;

     


    四、常量符号:

    ---- 任意一个字母,不区分大小写:“[[:alpha:]]”
    ---- ---- 举例: grep "3[[:alpha:]]{3,5}" re.txt // 匹配3后面有3~5个字母的行;

    ---- 任意一个小写字母:“ [[:lower:]]”
    ---- ---- 举例:grep "3[[:lower:]]+" re.txt // 匹配3后面至少有一个小写字母的行;

    ---- 任意一个大写字母:“ [[:upper:]] ”
    ---- ---- 举例: grep "3[[:uper:]]?" re.txt // 匹配3后面有0个或者1个大写字母的行;

    ---- 任意一个数字:“[[:digit:]]”
    ---- ---- 举例:grep "[[:digit:]]+" re.txt // 匹配至少出现一个数字的行;

    ---- 任意一个数字或字母:“[[:alnum:]]”
    ---- ---- 举例:grep "[[:alnum:]]?" re.txt // 匹配至多出现一个字母或数字的行;

    ---- 表示任意空白字符,包括“空格”、“tab键”等:[[:space:]]
    ---- ---- 举例:grep "[[:space:]]?" re.txt // 匹配至多一个空白字符或tab;

    ---- 表示任意标点符号:[[:punct:]]
    ---- ---- 举例:grep "[[:punct:]]?" re.txt // 匹配至多一个标点符号;


    -- 总结:

    ---- [ ]:表示匹配这个“[]”范围内的任意“单个”字符;

    ---- [^ ]:表示匹配这个“[ ]”范围以外的任意“单个”字符;

    ---- [] 和 [^]是相对的,[^ ]相当于[]取反;

    ---- ---- [[:alpha:]]:
    ---- ---- ---- 最外层[]:表示指定范围内的任意单个字符;相当于开头的[];
    ---- ---- ---- 最内层[:alpha:] :表示所有“大写字母和小写字母”组成的集合;

     


    ---- 等价任意字符:

    ---- ---- [0-9]等价[[:digit:]]:表示任意的单个“数字”字符;

    ---- ---- [a-z]等价[[:lower:]]:表示任意单个“小写字母”字符;

    ---- ---- [A-Z]等价[[:upper:]]:表示任意单个“大写字母”字符;

    ---- ---- [a-zA-Z]等价[[:alpha:]]:表示任意单个“字母”字符;

    ---- ---- [a-zA-Z0-9]等价[[:alnum:]]:表示任意单个“字母和数字”字符;

    ---- ---- [^ a-z]:表示“非小写字母”的单个字符可以被匹配到;

    ---- ---- [^ A-Z]:表示“非大写字母”的单个字符可以被匹配到;

    ---- ---- [^ a-zA-Z]:表示“非小写字母和非大写字母”的单个字符可以被匹配到,比如匹配单个“数字”,“符号”;

    ---- ---- [^ a-zA-Z0-9]:表示“非字母、非数字”的单个字符可以被匹配到,比如匹配单个字符“符号”;

     


    五、分组及后向引用:

    -- 分组符号:( )

    -- -- ( ):表示将括号其中的内容看作一个分组,即括号中的内容看作一个整体;

    -- -- -- -- 举例:grep -n --color "(h.l{2}.) world 1" re.txt // 文字解释繁杂,自己琢磨吧;

    -- -- -- -- -- “1”:表示引用整个正则中第一分组中的正则所匹配的结果;

    -- -- -- -- -- “2”:表示引用整个正则中第二分组中的正则所匹配的结果;


    -- -- 嵌套分组:grep --color "(1 (2 ) ) 1 2" re.txt

    -- -- -- -- 分组顺序:分组的顺序取决于分组符号的左侧部分的顺序;

    -- -- -- -- -- -- 嵌套分组由外到内,1~n;最外层为“分组1”,最内层为“分组n”;

    -- -- -- -- -- -- 最左侧第一个括号,为“分组1”;

    -- -- -- -- -- -- 最左侧第二个括号,为“分组2”;

    -- -- -- -- -- -- 1 :引用第一分组;

    -- -- -- -- -- -- 2 :引用第二分组;

     

     

    六、转义字符:


    -- 转义字符“”: 转义字符功能,表示有“特殊意义”的字符转化成“普通”字符;

    -- -- 转义字符“.”:转义后只表示普通的字符“.”;未转义前“.”,表示任意的单个字符;

    -- -- 转义字符“*”:转义后只表示普通的字符“*”;未转义前“*”,表示连续引用“*”前面字符任意次数量;

    -- -- 转义字符“?”:转移后只表示普通字符“?”;未转义前“?”,表示引用“?”前面字符0次或1次();

    -- -- 转移字符“+”:转义后只表示普通字符“+”;未转义前“+”,表示引用“+”前面字符1次到n次(至少1次);

    -- -- 转移字符“\”:转义后只表示普通字符“”;未转义前“”,表示“转义符号”;

     


    七、基本正则表达式小结:


    ---- ---- 常用符号

    . -- 表示任意单个字符;

    * -- 表示“*”前面的字符连续出现任意次数,包括0次;

    .* -- 表示任意长度的任意字符,与通配符中的“*”的意思相同;

    -- 表示转义字符,当与正则表达式中的符号结合时表示符号本身;

    [ ] -- 表示匹配指定范围内的任意单个字符;

    [^ ] -- 表示匹配指定范围外的任意单个字符;


    ---- ---- 单个字符匹配相关:

    [[:alpha:]] -- 表示任意单个大小写字母;

    [[:lower:]] -- 表示任意单个小写字符;

    [[:upper:]] -- 表示任意单个大写字母;

    [[:digit:]] -- 表示0~9之间的任意单个数字;

    [[:alnum:]] -- 表示任意单个数字或字母;

    [[:space:]] -- 表示任意单个空白字符,包括“空格”、“tab键”;

    [[:punct:]] -- 表示任意单个标点符号;

    [^[:alpha:]] -- 表示单个非字母字符;

    [^[:lower:]] -- 表示单个非小写字母字符;

    [^[:upper:]] -- 表示单个非大写字母字符;

    [^[:digit:]] -- 表示单个非数字字符;

    [^[:alnum:]] -- 表示单个非数字非字母的字符;

    [^[:space:]] -- 表示单个非空白字符;

    [^[:punct:]] -- 表示单个非标点符号字符;

    [ 0-9 ] 与 [[:digit:]] 等效;

    [ a-z ] 与 [[:lower:]] 等效;

    [ A-Z ] 与 [[:upper:]] 等效;

    [ a-zA-Z ] 与 [[:alpha:]] 等效;

    [ a-zA-Z0-9 ] 与 [[:alnum:]] 等效;

    [^ 0-9 ] 与 [^[:digit:]] 等效;

    [^ a-z ] 与 [^[:lower:]] 等效;

    [^ A-Z ] 与 [^[:upper:]] 等效;

    [^ a-zA-Z ] 与 [^[:alpha:]] 等效;

    [^ a-zA-Z0-9 ] 与 [^[:alnum:]] 等效;


    ---- ---- 简短格式(部分解析器识别):

    d -- 表示任意单个0~9的数字;

    D -- 表示任意非数字字符;

    -- 表示匹配单个横向制表符(相当于一个tab键);

    s -- 表示匹配单个空白字符,包括“空格”、“tab键”;

    S -- 表示匹配单个非空白字符;


    ---- ---- 次数匹配相关:

    ? -- 表示匹配“?”前面的字符0或1次;

    + -- 表示匹配“+”前面字符至少一次,或者连续匹配多次,连续次数上不封顶;

    {n} -- 表示匹配“{ }”前面字符连续出现n次,将会被匹配到;

    {n,m} -- 表示匹配“{}”前面字符连续出现n~m次之间;

    {,m} -- 表示匹配“{}”前面字符连续出现m次,最少0次,都会匹配到;

    {n,} -- 表示匹配“{}”前面字符连续出现至少n次, 才会被匹配到;


    ---- ---- 位置边界匹配相关:

    ^ -- 表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配;

    $ -- 表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配;

    ^$ -- 表示匹配空行,这里所描述的空行表示“回车”,而“空格”或“tab”等都不能算作此处所描述的空行;

    ^abc& -- 表示abc独占一行时,会匹配到;

    <或者:匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现;

    >或者:匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现;

    B -- 表示匹配非单词边界,与正好相反;

    -------- 举例:grep "BerB" re.txt // 匹配er既不在词首也不再词尾的字符串。匹配never,不匹配ever,eraser;

     

    ---- ---- 分组与向后引用

    () -- 表示分组符号,我们可以将其中的内容当作一个整体;分组可以嵌套,由外到内,分组编号为1~n;

    (ab) -- 表示将ab当做一个整体去处理;

    1 -- 表示引用整个表达式中的第一个分组中的正则匹配到的结果;

    2 -- 表示引用整个表达式中的第二个分组中的正则匹配到的结果;

     

     

    八、扩展正则表达式

    -- 去掉“基本正则表达式”中的转义字符“”;

    -- "com|cn|gov" ("|"含义为'或'):多个表达式中,只出现一个;相当于"[(com)(cn)(gov)]";

    -- "grep  -E "相当于 "egrep"。

    本文由lnlidawei(https://www.cnblogs.com/lnlidawei)原创或整理,转载请注明出处。
  • 相关阅读:
    【纯水题】POJ 1852 Ants
    【树形DP】BZOJ 1131 Sta
    【不知道怎么分类】HDU
    【树形DP】CF 1293E Xenon's Attack on the Gangs
    【贪心算法】CF Emergency Evacuation
    【思维】UVA 11300 Spreading the Wealth
    【树形DP】NOI2003 逃学的小孩
    【树形DP】BZOJ 3829 Farmcraft
    【树形DP】JSOI BZOJ4472 salesman
    【迷宫问题】CodeForces 1292A A NEKO's Maze Game
  • 原文地址:https://www.cnblogs.com/lnlidawei/p/11986489.html
Copyright © 2011-2022 走看看