1.8正则表达式

基本正则表达式_basic_REsBRE

扩展正则表达式_extended_REs或 EREs

  • 正则表达式Regular Expressions应用范围
    • 字符串匹配操作和替换操作
    • 举例:UNIX中的vi more pg grep yacc lex awk
    • 其他:Turbo Pascal/Visual C/Word等等
  • 正则表达式的功能
    • 描述一个字符串模式
  • 注意
    • 正则表达式规则与文件名通配符规则不同
      • 正则表达式规则用于文本处理的场合
      • 文件名匹配规则用于文件处理的场合
    • 不同软件对正则表达式的定义可能会有些不同

【基本法则】

. 匹配任意单个字符

.表示.本身 \逃逸符

  • 匹配其前面的字符任意次可为0次

.* 任意长度的任意字符

\? 匹配其前面字符1次或0次

x{m}:匹配其前面的字符“x”m次(精确匹配)

x{m,}:匹配其前面的字符“x”至少m次

x{m,n}:匹配其前面的字符“x”至少m次,至多n次

{1,} 1次至无上限 {0,3}至少3次

^ 锚定行首,此字符后面的任意内容必须出现在行首

$ 锚定行尾,次字符前面的任意内容必须出现在行尾

^$表示空行

[ ] 匹配指定范围内的任意单个字符

匹配指定范围外的任意单个字符

\< 其后面的任意字符必须作为单词的首部出现 \b

\> 其前面的任意字符必须作为单词的尾部出现 \b

\<\> 锚定单词例如 \<root\>

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

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

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

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

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

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

标点符号 [[:punct:]]

\d 匹配任何十进制数,相当于[0-9] -P选项加上

\D 匹配任何非数字字符,相当于0-9 -P选项加上

\s 匹配任何空白字符,

\S 匹配任何非空白字符,

\w 匹配任何字母数字字符,相当于[a-zA-Z0-9]

\W 匹配任何非字母数字字符,相当于a-zA-Z0-9

\ 匹配"\"

( ) 分组后项引用 \1 引用第一个左括号以及与之对应的右括号所包括的所有内容。 \2 \3 …

扩展正则表达式中增加了几个与正则表达式有区别的新内容:

  • 匹配其前面的字符至少1次 {1,}正则中近似

? 匹配紧挨在其前面的字符0次或1次 \?正则中

{m,n} 匹配前面字符至少m次至多n次 {1,}表示1至无限 {0,3}表示0-3

()分组 \1 \2 \3 …

| 或者

1.8.1特殊符号

  • 6个元字符
    • . * [ \ ^ $
  • 其它字符与其自身匹配
  • 转义
    • 用反斜线可以取消特殊字符的特殊含义。
    • 如:正则表达end.只与字符串end.匹配
    • 长的正则表达式由单字符正则表达式构成的
    • 非特殊字符与其自身匹配

如:a与a,b与b

    • 转义字符(\)

. * $ \^ [ \

    • 圆点(·)

匹配任意单字符

    • 集合表示

在一对方括号之间的字符为集合的内容,如:单字符正则表达式[abcd]与a或b,c,d匹配

  • 圆点,星号,反斜线在方括号内时,代表它们自己

如:[*.]可匹配3个单字符

  • 用减号-定义一个区间

如[a-d] [A-Z] [a-zA-Z0-9]

  • 减号在最后,则失去表示区间的意义

[ad-]只与3个字符匹配

  • 用^表示补集: ^在开头,则表示与集合内字符之外的任意字符匹配

如:a-z匹配任一非小写字母

^不在开头,则失去其表示补集的意义

如:[a-z^]能匹配27个单字符

    • 正则表达式的组合详见
    • 串结

如abc, [A-Z].[0-9]·

    • 星号(*)

单字符正则表达式后跟*,匹配此单字符正则表达式的0次或任意多次出现

例:正则表达式12*4

与字符串1234不匹配,与1224,12224,14匹配

例: 正则表达式[A-Z][0-9]*

此例中*作用的单字符正则表式为[0-9],代表

[A-Z]

[A-Z][0-9]

[A-Z][0-9][0-9]

[A-Z][0-9][0-9][0-9],等等

与A,A1,C45,D768匹配,与b64512,T56t不匹配

    • $ 在尾部时有特殊意义,否则与其自身匹配

例:123$ 匹配文件中行尾的123,不在行尾的123字符不匹配

例:$123与字符串$123匹配

例:.$ 匹配行尾的任意字符

    • ^ 在首部时有特殊意义,否则与其自身匹配

例:^printf匹配行首的printf字符串,不在行首的printf串不匹配

例:Hel^lo与字符串Hel^lo匹配

例:在vi中使用 :10,50s/^//g

删除10-50行的每行行首的4个空格

results matching ""

    No results matching ""