全面分析Linux正则表达式(二)


  Linux正则表达式不仅仅是用于各种语言的编程,系统管理员也必须得熟悉。前面我介绍了模式修正符,现在我们继续介绍,它是学好Linux/UNIX必需掌握的一个知识点,否则你连Linux的启动脚本都读不懂。
  Linux正则表达式的元字符(Meta-characters)
  Linux正则表达式的威力在于其能够在模式中包含选择和循环。它们通过使用元字符来编码在模式中,元字符不代表其自身,它们用一些特殊的方式来解析。
  有两组不同的元字符:一种是模式中除了方括号内都能被识别的,还有一种是在方括号内被识别的。如果想在模式里包含一个元字符本身,就需要用到转义符号,正则表达式常用反斜线"\"作为转义字符使用,为了匹配"\"本身,你需要输入两个"\",向这样"\\"。当然,这个符号本身也是一个元字符。
  方括号之外的元字符有这些:
  \
  有数种用途的通用转义符
  ^
  断言目标的开头(或在多行模式下行的开头,即紧随一换行符之后)
  $
  断言目标的结尾(或在多行模式下行的结尾,即紧随一换行符之前)
  .
  匹配除了换行符外的任意一个字符(默认情况下)
  [
  字符类定义开始
  ]
  字符类定义结束
  |
  开始一个多选一的分支
  (
  子模式开始
  )
  子模式结束
  ?
  扩展 ( 的含义,我们已经在介绍模式修正符里看到过它的使用。它也可以是 0 或 1 数量限定符,以及数量限定符最小值
  *
  匹配 0 个或多个的数量限定符
  +
  匹配 1 个或多个的数量限定符
  {
  最少/最多数量限定开始
  }
  最少/最多数量限定结束
  模式中方括号内的部分称为"字符类"。字符类中可用的元字符为:
  \
  通用转义字符
  ^
  排除字符类,但仅当其为第一个字符时有效
  -
  指出字符范围
  在这里,最值得一提是"\"这个元字符。之所以重点对它进行讲解是因为这一个元字符有多种不同的用法,在不同情况下代表不同的含义,而且使用频率非常高,是个很容易让人迷惑的地方。
  第一种用法前面我们已经提过,是作为通用转义字符使用,如果其后跟着一个非字母数字字符,则取消该字符可能具有的任何特殊含义。此种将反斜线用作转义字符的用法适用于无论是字符类之中还是之外。例如"\\"代表一个单独的反斜线"\"。
  第二种用途提供了一种在模式中以可见方式去编码不可打印字符的方法。模式中完全可以包括不可打印字符,除了代表模式结束的二进制零,例如,可以用"\a"代表alarm,即 BEL 字符(0x07),或用"\cx"代表"control-x",其中 x 是任意字符。当然,这种方法表示的不一定非得是不可打印字符,实际上,可以用"\xhh(十六进制代码为 hh 的字符)"和"\ddd(八进制代码为 ddd 的字符)"来以编码的形式表达任何单字节字符,例如"\040"可以用来表示空格。
  反斜线的第三个用法是指定通用字符类型,这些字符类型序列可以出现在字符类之中和之外。每一个匹配相应类型中的一个字符。如果当前匹配点在目标字符串的结尾,以上所有匹配都失败,因为没有字符可供匹配。有以下这些常见的通用字符类:
  \d 任一十进制数字
  \D任一非十进制数的字符
  \s任一空白字符
  \S任一非空白字符
  \w任一"字"的字符
  \W任一"非字"的字符
  反斜线的第四个用法是某些简单的断言,关于断言的讨论我们放在后面,这里先不加讨论。
  反斜线的最后一个用法是逆向引用。关于逆向引用,我们会在后面讨论逆向引用的部分来做进一步的讨论。
  我们已经看到,反斜线的众多用法,其中一些涉及到了以后才讲的内容。我们在模式中遇到反斜线时一定要注意它具体是哪一种用途以免疑惑。
  另外两个方括号也是非常重要的元字符,左方括号开始了一个字符类,右方括号结束之。单独一个右方括号不是特殊字符。字符类匹配目标中的一个字符,该字符必须是字符类定义的字符集中的一个;除非字符类中的第一个字符是音调符(^),此情况下目标字符必须不在字符类定义的字符集中。如果在字符类中需要音调符本身,则其必须不是第一个字符,或用反斜线转义。例如,[^A-Z]表式非大写字符。
  这里先介绍到这里,Linux正则表达式将继续在后面介绍。

你可能感兴趣的:(linux)