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

    一、Linux文本查找命令 

      在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令: 

      1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。 

      2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。 

      3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。 

      如下简单的介绍grep命令: 

      语法格式: 

      grep [options ...] pattern-spec [files ...] 

      用途: 

      匹配一个或多个模式的文本行。 

      options: 

      -E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。 

      -F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。

      -e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。

    -f : pat-file文件读取模式作为匹配。

      -i : 模式匹配时忽略大小写差异。

      -l : 列出匹配模式的文件名称,而不是打印匹配的行。

      -q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。

      -s : 不显示错误信息,通常与-q并用。

      -v : 显示不匹配模式的行。

      说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。

      可以使用多个-e -f 选项,建立要查找的模式列表。


    二.正则表达式简要介绍

      1.正则表达式的组成

      (1).一般字符:没有特殊意义的字符

      (2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义

      2.如下讲下正则表达式中的常见meta字符

      (1).POSIX BREERE中都有的meta字符:

         :  通常用于打开或关闭后续字符的特殊含义,如(...){...}

      .   :   匹配任何单个字符(除NUL换行符)

      *  :   匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度

      ^  :   匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义。

      $  :   匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义

      []  :   匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,而是表示取反符号。  [^b-d]  :表示不再b~d范围内的字符 。

      (2).POSIX BRE中才有的字符:  

      < 反斜杠+小于号,词首定位符, “< abc”表示所有包含以”abc”开头的单词的行

      > 反斜杠+大于号,词尾定位符, “>abc”表示所有包含以”abc”结尾的单词的行

      - 减号,用于指明字符范围, “[a-c]”将匹配包含abc中任意一个字符的字符串  

      {n,m} : 区间表达式,匹配在它前面的单个字符重现的次数区别。{n}指重现n;{n,m}指重现nm;

      ( ) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如(ab).*1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。

       : 重复在()方括号内第n个子模式至此点的模式。

      (3).POSIX ERE中才有的字符:

      {n,m} : BRE{n,m}功能相同

      + : 匹配前面正则表达式的一个或多个扩展,相当于 expr{1,}。如ab+c表示ac之间有1个至无穷个b

      ? : 匹配前面正则表达式的零个或一个扩展,比如abc,匹配结果为ac之间b出现0次或1次。

      | : 匹配|符号前或后的正则表达式

      ( ) : 匹配方括号括起来的正则表达式群

      (4). 方括号([])。表达式 re(a|b|c)d  等价于  re[abc]d,‘re’和‘d’之间的一个字母为‘a’、‘b’或‘c’。

      4.1.字符集  [:  :]

      标识字符集,有如下几种:

    [:alnum:] : 数字字符 [:digit:] : 数字字符 [:punct:] : 标点符号字符

    [:alpha:] : 字母字符 [:graph:] : 非空格字符  [:space:] : 空格字符

    [:blank:] : 空格与定位字符 [:lower:] : 小写字母字符 [:upper:] : 大写字母字符

    [:cntrl:] : 控制字符 [:print:] : 可显示的字符 [:xdigit:] : 16进制数字

      纯数字:[[:digit:]][0-9]

      小写字母:[[:lower:]][a-z]

      大写字母:[[:upper:]][A-Z]

      大小写字母:[[:alpha:]][a-zA-Z]

      数字加字母:[[:alnum:]][0-9a-zA-Z]

      空白字符:[[:space:]]

      标点符号:[[:punct:]]

       4.2.排序符号

      指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号

      4.3.等价字符

      认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。

      说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。

      例 [[:alpha:]!] : 匹配任一英文字母或感叹号。

            [[.ch.] : 匹配ch排序元素,而不匹配单独的字母ch.

       3.简单正规表达式匹配案例

      china  :  匹配此行中任意位置有china字符的行

      ^china : 匹配此以china开关的行

      china$ : 匹配以china结尾的行

      ^china$ : 匹配仅有china五个字符的行

      [Cc]hina : 匹配含有Chinachina的行

      Ch.na : 匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行

      Ch.*na : 匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符 


    三.实例

      如下通过常用实例来学习BREERE匹配,源文件url.txt内容如下:

      www.baidu.com

      http://www.baidu.com

      https://www.baidu.com

      http://wwwbaiducom

      baidu.com

      baidu

      1.url匹配

      匹配以http或者https开头,并且其后为:并且含有.的串

      BRE匹配:

      grep '^https{0,1}.*..*' url.txt

      ERE匹配:

      grep -E '^https?.*..*' url.txt

      匹配结果如下:

      http://www.baidu.com

      https://www.baidu.com

      2.Email匹配

      示例文件内容为:

      hfutwyy@qq.com

      aaaa@

      aaa@.com

      aaa@gmail.com

      @@baidu.com

      匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.

      grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*..*' email.txt

       匹配结果:

      hfutwyy@qq.com

      aaa@.com

      aaa@gmail.com

      

     
  • 相关阅读:
    ASCII码表以及不同进制间的O(1)转换
    四则运算表达式的语法分析
    语法分析器初步学习——LISP语法分析
    ASC与HEX之间的转换
    字节存储数据
    进制之间的转换
    java多线程CountDownLatch
    java反射机制
    java注解
    使用javafx实现视频播放器
  • 原文地址:https://www.cnblogs.com/ALXPS/p/6941131.html
Copyright © 2011-2022 走看看