正则表达式

来源:互联网 发布:知乎 朱锋 编辑:程序博客网 时间:2024/05/22 02:00

POSIX 定义了两种正则表达式语法:基本正则表达式(BRE)和扩展正则表达式(ERE)。

下表为meta字符

字符BRE/ERE模式含义 / 两者皆可  关闭后续字符的特殊意义 . 两者皆可 匹配任何单个的字符,NULL除外 * 两者皆可 匹配在之前的任何数目的单个字符。如.*代表匹配任意字符的任意长度 ^ 两者皆可 匹配紧接着的正则表达式,在行或者字符串的起始处,^The代表行首为The $ 两者皆可

 匹配紧接着的正则表达式,在行或者字符串的结尾处

^$匹配空行,例:cc -E foo.c | grep -v '^$' > foo.out 编译源码后删除空行

 [...] 两者皆可 匹配方括号内的任一字符,连字符-指的是连续字符的范围 /{n,m/} BRE 匹配之前的单个字符重复出现的次数,/{n/}重复出现n次,/{n,m/}重复出现n到m次,/{n,/}至少重复出现n次 /( /) BRE

 把/( /)之间的模式存储在特殊的保留空间"holding space"中,最多可存9个,可通过/1到/9被重复使用在相同模式中。如/(ab/).*/1代表ab重复两次出现,中间可保存任何数目的字符。如ab123ab,或abab

 

常用与查找重复字以及匹配引号,如/([" ']/).*/1 匹配以单引号或双引号括起来的字,如'good', "abc"等

 /n BRE /(/)内第n个子模式到该点的模式。n为1到9的数字,1由左开始 {n,m} ERE 类似于BRE的/{n,m/} + ERE 匹配前面正则表达式的一个或多个实例 ? ERE 匹配前面正则表达式的0个或1个实例  | ERE 匹配于|前或后的正则表达式 ( ) ERE 匹配与方括号括起来的正则表达式群。

 

 POSIX 字符集(Character class):以[:与:]将关键字组合括起来的POSIX字符集。关键字描述各种不同的字符集,例如英文字母字符、控制字符等

具体如下:

 [[:alnum:]]  文本数字字符  [[:punct:]]  标点符号
 [[:alpha:]]  字母字符  [[:blank:]]  制表符和空格
 [[:lower:]]  小写字母  [[:sapce:]]  空白字符
 [[:upper:]]  大写字母  [[:cntrl:]]  控制符
 [[:digit:]]  数字  [[:print:]]  所有可打印的字符
 [[:xdigit:]]  十六进制数字  [[:graph:]]   除空格外所有可打印的字符 
 

 排序符号(Collating symbol)

排序符号指的是将多字符序列视为一个单位。它使用[.与.]将字符组合括起来。排序符号在系统所使用的特定locale上各有其定义。

[[.ch.]]则匹配于ch(排序元素),但字母c或h则不是。

 

等价字符集(Equivalence class)

等价字符集列出的是应视为等值的一组字符,以[=与=]括住,[[=e=]]可能匹配于eē、ě、è、é、ê

 

/<单词首, />单词尾