• 正则表达式总结


    本文学习总结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)原创或整理,转载请注明出处。
  • 相关阅读:
    VC6 下 libpng 库的编译与初步使用
    Windows上编译libtiff
    ActiveX控件开发
    静态库和动态库的优缺点
    KStudio window上编译uclinux
    4. API之打印函数
    window消息机制二
    消息机制、子窗口和父窗口的消息传递
    window消息机制
    dll 显示调用
  • 原文地址:https://www.cnblogs.com/lnlidawei/p/11986489.html
Copyright © 2020-2023  润新知