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

    正则表达式介绍与基础


    概念

      正则表达式(Regular Expression)是一个定义搜索模式的字符序列。
      使用**单个字符串**来描述、匹配一系列符合某个**句法规则**的字符串
      在做文字处理或编写程序时,如需要用到查找、替换等功能时,可以使用正则表达式快速达到目的。
    

    特殊符号

    内容

    参数 含义
    [:alnum:] 英文大小写字母及数字
    [:alpha:] 英文大小写字母
    [:blank:] 空格和tab键
    [:cntrl:] 键盘上的控制按键,如CR,LF,TAB,DEL
    [:digit:] 数字
    [:graph:] 空白字符意外的其他
    [:lower:] 小写字母
    [:print:] 可以被打印出来的任何字符
    [:punct:] 标点符号
    [:upper:] 大写字母
    [:space:] 任何会产生空白的字符,如空格,tab,CR等
    [:xdigit:] 十六进制的数字类型

    实例

    1. 使用特使符号查找text.txt文件中的小写字母
    grep -n '[[:lower:]]' text.txt
    
    1. 使用特使符号查找text.txt文件中的数字
    grep -n '[[:digit:]]' text.txt
    

    grep命令与正则表达式


    参数说明

    • -a:以text档案的方式搜寻binary档案数据
    • -c:计算找到'搜寻字符串'的次数
    • -i:忽略大小写
    • -n:输出行号
    • -v:反向选择,即显示没有'搜寻字符串'内容的行

    实例

    grep -n 'the' text.txt  #输出有‘the’的行
    grep -in 'the' text.txt #输出忽略大小写的‘the’行
    grep -vn 'the' text.txt #反向选择,输出没有‘the’的行
    

    字符组匹配

    []可以用来查找数组

      注意:无论[]中包含多少个字符,它都只代表一个字符。
      比如要查找“tast”或者“test”这两个字符串,都是t?st形式,所以我们可以使用[]进行查找:
    
    grep -n 't[ae]st' text.txt
    

    字符组支持使用连字符“-”,表示一个范围

      注意:当“-”前后构成范围时,要求前面字符的码位小于后面字符的码位。
    

    [^]为反向选择字符组

      用于排除后面的字符,使用方式为:[^需要反向选择的字符]
      注意[^]与参数-v的区别,两者都表示反向选择,但如果包含有反向选择的字符的行含有其他字符的话,[^]仍会输出该行,而-v只会输出不含有反向选择的字符的行。
    

    实例

    参数 含义
    [abc] 表示“a”或“b”或“c”
    [0-9] 0-9任意一个数字,等价于[0123456789]
    [u4e00-u9fa5] 任意一个汉字
    [^a1<] 除“a”,“1”,“<”外的其他任意一个字符
    ^a-z] 除小写字母外的任意一个字符
    grep -n '[^a-z]oo' text.txt      # 查找Xoo形式的字符串,要求“oo”前不能有小字母
    grep -n '[^[:lower:]]' text.txt  # 等价于上一条
    grep -n 'oog' text.txt           # 查找包含“oog”的字符串
    grep -n '[^go]oog' text.txt      # 查找包含“oog”的字符串,并且“oog”前不能有“g”或者“o”
    

    行首行尾符

    行首符^

    grep -n '^the' text.txt   # 查找行首为“the”的行
    grep -n '^[A-Z]' text.txt # 查找行首为大写字母的所有行
    
      注意:行首符^和反向选择[^]的区别,'^[A-Z]'表示以大写字母开头,'[^A-Z]'表示除了大写字母A-Z的所有字符
    

    行尾符$

    grep -n 'd$' text.txt   # 查找以字母d为结尾的行
    grep -n '^$' text.txt   # 小技巧,将行首和行尾符连用,可以用来查找空行
    grep -v '^$' text.txt | grep -v '^#'  # 过滤掉空白行和注释行(以#开头)
    

    任意和重复字符


    grep -n 'a.ou.' text.txt   # 查找a?ou?形式的字符
    

    其中小数点'.'表示任意一个字符,一个小数点只能表示一个未知字符

    星号* 含义
    * 重复前面0个或多个字符
    e* 空字符或者一个以上e字符
    ee* 第一个e必须存在,第二个e则可以是0个或者多个
    eee* 第一个和第二个e必须存在,第三个e可以是0或者多个
    ee*e 第一个和第三个e必须存在,第二个e可以是0或者多个

    限定连续字符范围{}


    {}可限制一个范围区间内重复字符数

    grep -n 'ooo*' text.txt       # 查找连续2个o字符的字符串
    grep -n 'o{2}' text.txt     # {}需要转义字符
    grep -n 'go{2,5}g' text.txt # 查找g后面接2个到5个o,再接g的字符串 
    

    总结


    参数 含义
    ^word 查找word为行首的行
    word$ 查找word为行尾的行
    .(小数点) 表示1个任意字符
    * 重复0到无穷多个前一个RE字符
    [list] 查找含有l,i,s,t任意一个字符的字符串
    [n1-n2] 查找致电给字符串范围,如[0-9],[a-z],[A-Z]
    [^list] 反向搜索,查找不含有l,i,s,t任意一个字符的字符串
    {n,m} 找出n到m个前一个RE字符
    {n,} 找出n个以上的前一个RE字符
    TO BE CONTINUED...
  • 相关阅读:
    ubuntu下/etc/rc.local和/etc/init.d/rc.local的区别
    Shell 中的中括号用法总结
    基于C语言sprintf函数的深入理解
    linux下查看十六进制文件方法
    oracle load data infile
    linux bash中too many arguments问题的解决方法
    关于促进问题解决
    SYSTEM表空间过大问题
    01 Oracle分区索引
    oracle 11gR2 ASM添加和删除磁盘 转
  • 原文地址:https://www.cnblogs.com/ly-leah/p/13508040.html
Copyright © 2011-2022 走看看