美文网首页
正则表达式语法 Regular Expression

正则表达式语法 Regular Expression

作者: 心疼你萌萌哒 | 来源:发表于2018-04-25 19:49 被阅读0次
    正则表达式语法 Regular Expression
    vim grep sed awk perl java nginx apache mail垃圾邮件过滤。。。等等都使用正则
    
    什么叫正则表达式:她是一种字符串的表达方式
    Some one let the cat out of the bag! 什么意思?秘密泄露?
    
    特点:
    1.理解正则表达式类似理解算术表达式:
    1+2 3*5 1+2*3 (1+2)*3
    
    2.正则表达式像算术表达式一样也有优先级
    
    构成:一个正则表达式描述了一种模式或字符序列(pattern)
    1.除元字符之外的任意字符都是表示他字面意思的正则表达式
    2.元字符(基本元字符、扩展元字符)
    
    正则表达式的匹配过程:basic regular expression (rtgex)
     
    
    基本元字符:
    . 匹配除换行符之外的任意单个字符,awk中可以匹配换行符
    例子:mkdir sed
    [root@nas ~]# cd sed
    [root@nas sed]# vim test.txt
    1.  [root@nas sed]# sed ' s/./A/g' test.txt
    AAAAAAAAAAA
    AAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAA
    [root@nas sed]# echo hello world > test.txt
    2.  [root@nas sed]# sed ' s/./A/' test.txt
    Aello world
    3.  [root@nas sed]# sed ' s/o. /A/' test.txt
    hello world
    nice to meet you
    hAare you han meimei
    
    * 表示他的前置字符有零个或多个 a*
    1.[root@nas sed]# vim test1.txt
    [root@nas sed]# sed  ' s/ca*/A/' test1.txt
    A
    A
    A
    A
    [root@nas sed]# cat test1.txt
    c
    ca
    caaaa
    caaaaaaaaaa
    2.[root@nas sed]# cat test1.txt
    c
    ca
    caaaa
    caaaaaaaaaa
    [root@nas sed]# sed  ' s/c.*/A/' test1.txt
    A
    A
    A
    A
    .* 贪婪匹配 吃掉后面的所有的东西
    [...] 匹配方括号中的任意一个字符,^为否定匹配, -表示字符的范围
    ^ 作为正则表达式的第一个字符,匹配行的开始。在awk中可以嵌入换行符
    $ 作为正则表达式的最后一个字符,匹配行的结尾。在awk中可以嵌入换行符
    \{n,m\} 匹配前置字符出现n和m之间的任意次数,\{n\}匹配出现n次。\{n,\}匹配至少出现n次
    \ 转义字符
    \<            词首定位符     /\<bin/      匹配以bin开头的单词
    \>           词尾定位符     /fix\>/       匹配以fix结尾的单词
    
    [root@wing ~]# echo wingabc wing | sed 's/\<wing/S/g'
    Sabc S
    [root@wing ~]# echo wingabc wing | sed 's/\<wing\>/S/g'
    wingabc S
    
    扩展元字符:
    Extended Metacharacters (egrep and awk)
    + 匹配前面的正则表达式的一次出现或多次出现
    ? 匹配前面的正则表达式的零次出现或一次出现
    | 可以匹配前面的或后面的正则表达式(替代方案)
    () 对正则表达式分组
    {n,m} 匹配出现的n到m次数, {n}匹配出现n次。{n,}匹配至少出现n次,大多数awk都不支持,用于POSIX egrep和POSIX awk
    
    POSIX字符类:
    表达式         功能                                          示例
    [:alnum:]      字母与数字字符                         [[:alnum:]]+  
    [:alpha:]       字母字符(包括大小写字母)            [[:alpha:]]{4}
    [:blank:]       空格与制表符                           [[:blank:]]*
    [:digit:]         数字字母                                   [[:digit:]]?
    [:lower:]       小写字母                                     [[:lower:]]{5,}
    [:upper:]      大写字母                                  [[:upper:]]+
    [:punct:]      标点符号                                     [[:punct:]]
    [:space:]      包括换行符,回车等在内的所有空白[[:space:]]+
    
    编写正则表达式的3 个步骤:
    1 知道要匹配的内容以及它如何出现在文本中。
    2 编写一个模式来描述要匹配的内容
    3 测试模式来查看它匹配的内容
    
    模式匹配产生的结果:
    Hits(命中)
    这是我想匹配的行
    
    Misses(未命中)
    这是我不想匹配的行
    
    Omissions(遗漏)
    这是我不能匹配但想要匹配的行
    
    False alarms(假警报)
    这是我不想匹配的但却匹配了的行
    
    正则表达式分类应用:
    字符类
    [Ww]hat
    [root@localhost ~]# cat test.txt
    how are you what ni hao  What
    [root@localhost ~]# sed ' s/[Ww]hat/A/' test.txt
    how are you A ni hao  What
    [root@localhost ~]# sed ' s/[Ww]hat/A/g' test.txt
    how are you A ni hao  A
    
    \.H[12345]
    [root@localhost ~]# cat test.txt 
    how are you what ni hao  What
    .H2h3
    [root@localhost ~]# sed ' s/\.H[12345]/A/g' test.txt
    how are you what ni hao  What
    Ah3
    
    字符的范围
    [a-z]
    [0-9]
    [Cc]hapter[1-9]
    [-+*/]
    [0-1][0-9][-/][0-3][0-9][-/][0-9][0-9]
    
    排除字符类
    [^0-9]
    [root@localhost ~]# sed ' s/\.H[12345]/A/g' test.txt
    how are you what ni hao  What
    Ah3
    [root@localhost ~]# sed ' s/[^0-9]/A/g' test.txt
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AA2A3
    
    重复出现的字符
    10
    50
    100
    500
    1000
    5000
    [15]0*
    [15]00*
    
    字符的跨度
    * 与 \{n,m\}
    电话号码的匹配
    [0-9]\{3\}-[0-9]\{7,8\}
    [root@localhost ~]# sed -r  ' s/[0-9]{3}-[0-9]{7,8}/A/' test.txt
    how are you what ni hao  What
    .H2h3
    150000000  150 1500 1000
    15880310015
    A
    [root@localhost ~]# cat test.txt
    how are you what ni hao  What
    .H2h3
    150000000  150 1500 1000
    15880310015
    158-5555015
    
    分组操作
    compan(y|ies)
    注意:大多数sed 和grep 不能对圆括号()进行匹配,但是在egrep 和
    awk 所有版本都是可以的
    

    相关文章

      网友评论

          本文标题:正则表达式语法 Regular Expression

          本文链接:https://www.haomeiwen.com/subject/zbaylftx.html