第7章 sed、gawk介绍与正则表达式-----------(扩展的正则表达式)

来源:互联网 发布:网络教学app有哪些 编辑:程序博客网 时间:2024/05/21 14:04

7.6 扩展的正则表达式

         POSIXERE模式包括某些Linux应用程序和工作使用的其他符号。gawk程序能够识别ERE模式,但是sed编辑器。sed编辑器和gawk程序的正则表达式引擎存在差异。gawk程序可以使用大部分扩展正则表达式模式的符号,并且具有sed编辑器没有的其他一些筛选能力。由于这一点,gawk处理数据流的速度通常较慢。

7.6.1 问号

         问号(?)表示其前面的字符可以不出现或出现一次,它不匹配重复出现的字符。

        

         上图实例:如果o不出现在文中,或者仅在文本中出现一次,则模式匹配。

         问号可以与字符类连用:

        

         上述实例:如果该字符类中字符没有出现或者其中一个字符出现,模式匹配通过。然而,如果两个字符同时出现,或者一个字符出现两次,则模式匹配失败。

7.6.2 加号

         加号(+)表示其前面的字符可以出现一次或多次,但必须出现至少一次。如果该字符不存在,则模式不匹配。

         加号也适用与字符类,与星号和问号的作用方式相同。

        

         如果字符类中定义的任一字符出现,该文本就与指定的模式匹配。如果不使用字符类,如果字符a或o字符不存在,模式匹配失败。

7.6.3 适用大括号

         在ERE中可以使用大括号指定对可重复的正则表达式的限制。通常称为间隔(interval)。可以用两种格式表示间隔:

m:该正则表达式正好出现m次

m,n:该正则表达式出现最少m次,最多n次

         这一功能允许调整某一字符或字符类在模式中出现的精确次数。默认情况下,gawk程序不能识别正则表达式间隔。必须指定--re-interval命令行选项,以便gawk程序识别正则表达式间隔

         操作实例如下:

        

         通过指定间隔1,可以将该字符在要匹配模式的字符串中存在的次数限定为1。如果该字符出现多次,则该模式匹配失败。

         需要指定上下限时,大括号可以派上用场。上图所示的例子中:如果o可以出现一次或两次,模式匹配通过;否则模式匹配失败。

         间隔字符也适用与字符类,如果在此文本模式中正好有一个或两个o,则此正则表达式模式匹配,但如果存在更多的任意组合,模式匹配就会失败。

7.6.4 管道符号

         管道符号允许用逻辑OR公式指定正则表达式检查数据流时使用的两个或多个模式。如果任何一个模式与数据流文本匹配,该文本通过。如果没有一个模式匹配,数据流文本失败。     

   

         正则表达式和管道符号之间不能有任何空格,否则将空格添加到正则表达式模式中。管道符号两个的任何正则表达式都可以使用任意正则表达式模式来定义文本。

7.6.5 将表达式分组

         正则表达式模式可以使用圆括号分组。在将正则表达式模式分组时,一个组合将作为一个标准字符处理。可以像特殊字符应用于正常字符一样,将特殊字符应用于组合。

        

         将分组和管道符号结合使用以创建可能的模式匹配组是很常见的组合。

0 0