• 3.2.1 什么是正则表达式


        正则表达式是一种表示方式,让你可以查找匹配特定准则的文本,例如,“以字母 a 开头”。此表示法让你可以写一个表达式,选定或匹配多个数据字符串。
     
        很多的UNIX工具程序沿用某一种正则表达式形式来强化本身的功能。这里列举一部分例子:
    • 用来寻找匹配文本行的 grep 工具族:grep 与 egrep ,以及非标准但很好用的 agrep 工具。
    • 用来改变输入流的 sed 流编辑器( stream editor ),本章稍后将会介绍。
    • 字符串处理程序语言,例如 awk、Icon、Perl、Python、Ruby、Tcl等。
    • 文件查看程序(有时称为分页程序,pagers ),例如 more、page、与 pg ,都常出现在商用UNIX系统上,另外还有 less分页程序。
    • 文本编辑器,例如历史悠久的 ed 编辑器、标准的 vi 屏幕编辑器,还有一些插件(add-on)编辑器,例如 emacs、jed、jove、vile、vim 等。
     
        正因为正则表达式对于UNIX的使用是这么重要,所以花些时间把它们弄熟绝对不会错,越早开始就能掌握得越好。
     
        从根本上来看,正则表达式是由两个基本组成部分所建立:一般字符与特殊字符。一般字符指的是任何没有特殊意义的字符,正如下表中所定义的。在某些情况下,特殊字符也可以视为一般字符。特殊字符常称为元字符( metacharacter ),本章接下来的部分都会以 meta 字符表示。
     
     
        POSIX BRE 与 ERE 的 meta 字符
    字符 BRE/ERE 模式含义
    两者都可 通常用以关闭后续字符的特殊意义。有时则是相反地打开后续字符的特殊意义,例如 ( ... ) 与 { ... } 。
    . 两者都可 匹配任何单个的字符,但 NUL 除外。独立程序也可以不允许匹配换行字符。
    * 两者都可 匹配在它之前的任何数目(或没有)的单个字符。以ERE而言,此前置字符可以是正则表达式, .* 代表“匹配任一字符的任一长度”。以BRE来说, * 若置于正则表达式的第一个字符,不具任何特殊意义。
    ^ 两者都可 匹配紧接着的正则表达式,在行或字符串的起始处。BRE:仅在正则表达式的开头处具此特殊含义,ERE:置于任何位置都具特殊含义。
    $ 两者都可 匹配前面的正则表达式,在字符串或行结尾处。BRE:仅在正则表达式结尾处具此特殊含义,RER:置于任何位置都具特殊含义。
    [...] 两者都可 方括号表达式,匹配方括号内的任一字符。连字符(-)指的是连续字符的范围。^符号置于方括号里第一个字符则有反向含义:指的是匹配不在列表内的任何字符。作为首字符的一个连字符或是结束方括号(]),则被视为列表的一部分。所有其他的 meat 字符也为列表的一部分。房括号表达式里可能会含有排序符号、等价字符集、以及字符集。
     
     
     
    字符 BRE/ERE 模式含义
    {n,m } BRE 区间表达式,匹配在它前面的单个字符重现的次数区间。{n}指的是重现 n 次;{n,}则为至少重现 n 次,而{n,m}为重现 n 至 m 次。m的值必须介于0至255间
    ( ) BRE 将( 与 ) 间的模式存储在特殊的“保留空间”。最多可以将9个独立的子模式存储在单个模式中。匹配于子模式的文本,可以通过转移序列1至9,被重复使用在相同模式里,例如(ab).*1,指的是匹配于ab组合的两次重现,中间可存在任何数目的字符。
    BRE 重复在 方括号内第 n 个子模式至此点的模式。n为1至9的数字,1为由左开始。
    {n,m} ERE 与先前提及BRE的{n,m}一样,只不过方括号前没有反斜杠。
    + ERE 匹配前面正则表达式的一个或多个实例。
    ? ERE 匹配前面正则表达式的零个或一个实例。
    | ERE 匹配于|符号前或后的正则表达式。
    ( ) ERE 匹配于方括号括起来的正则表达式群。
     
    简单的正则表达式匹配范例
     
    表达式 匹配
    tolstoy 位于一行上任何位置的7个字母:tolstoy
    ^tolstoy 7个字母tolstoy,出现在一行的开头
    tolstoy$ 7个字母tolstoy,出现在一行的结尾
    ^tolstoy$ 正好包括tolstoy这7个字母的一行,没有其他的任何字符
    [Tt]olstoy 在一行上的任意位置中,含有 Tolstoy 或是 tolstoy
    tol.toy 在一行上的任意位置中,含有 tol 这3个字母,加上任何一个字符,再接着toy这3个字母。
    tol.*toy 在一行上的任意位置中,含有 tol 这3个字母,加上任意的0或多个字符,再继续 toy 这3个字母。
     
     
  • 相关阅读:
    2021 Duilib最新入门教程(二)Duilib编译动态库
    2021 Duilib最新入门教程(一)Duilib简介
    webgl图库选型
    CUDA编程学习记录
    C++时间戳获取
    FFMPEG编译问题记录
    程序员的35岁
    Linux发行版及其目标用户
    服务器关机或重启
    Linux下找出吃内存的方法总结
  • 原文地址:https://www.cnblogs.com/avention/p/10306623.html
Copyright © 2020-2023  润新知