正则表达式(regular expression)是一种表示方式,在许多地方均有对此的支持,如命令grep、语言Python、工具vim等。但是这里仅讨论POSIX正则表达式,显然它与其他正则表达式(如传统的Unix正则表达式)存在稍许的差异。POSIX正则表达式分为:BRE(Basic Regular Expression)和ERE(Extended Regular Expressions)。以下是有关POSIX正则表达式的元字符(meta)的说明: / 用于关闭后续字符的特殊意义。有时用于反向的打开后续字符的特殊意义。 . (点号)匹配任意单个的字符,但NULL除外。 * 匹配任意数目的字符(可以为0)。以ERE来说,此前置字符可是正则表达式,如.*代表了匹配任意字符的长度。但对于BRE而言,*置于正则表达式的第一个字符,不具任何特殊意义。 ^ (脱字号)匹配出现在行首或字符串开始位置的空字符串。ERE:置于任何位置都具特殊含义;BRE:仅在正则表达式的开头具有此特殊含义。 $ 匹配出现在行末的空字符串。ERE:置于任何位置都具特殊含义;BRE:仅在正则表达式的结尾具有此特殊含义。 [...] 方括号表达式,匹配方括号内的任意一字符。连字符(-)指的是连续字符的范围。^符号置于方括号里第一个字符则有反向含义:指的是匹配不在列表内(方括号内)的任意字符。作为首字符的一个连字符或是结束方括号(]),则被视为列表的一部分。所有其他的meta字符也为列表的一部分。 以下只属于BRE: /{n-m} 区间表达式,匹配在它之前的单个字符重现的次数区间。/{n/}指的是重复n次;/{n,/}则为至少出现n次重复,而/{n,m}为重现n至m次。 /( /) 将/(与/)间的模式存储在特殊的“保留空间”。最多可将9个独立的子模式存储在单个模式中。如/(ab/).*/1,指的是匹配于ab组合的两次重现。 /n 重复在/(与/)方括号内第n个子模式至此点的模式。n为1至9的数字,由左开始。 以下只属于ERE: {n,m} 与先前提及的BRE的/{n,m/}一样,只不过方括号前没有反斜杠。 + 匹配前面正则表达式的1个或多个实例 ? 匹配前面正则表达式的0个或1个实例 | 匹配于|符号前或后的正则表达式。 ( ) 匹配于方括号括起来的正则表达式群。 POSIX方括号表达式: 1、字符集 [:与:] 2、排序符号 [.与.] 3、等价字符集 [=与=] 具体如下: [:alnum:] 数字字符 [:alpha:] 字母字符 [:blank:] 空格与定位字符 [:cntrl:] 控制字符 [:digit:] 数字字符 [:graph:] 非空格字符 [:lower:] 小写字母字符 [:print:] 可显示的字符 [:punct:] 标点符号字符 [:space:] 空白字符 [:upper:] 大些字母字符 [:xdigit:] 十六进制数字 同时在使用时运算符存在顺序问题,以下是由高至地的: BRE: 1、[. .] [= =] [: :] 2、/meta 3、[] 4、/( /) /digit 5、* /{ /} 6、无符号 7、^ $ . ERE: 1、[. .] [= =] [: :] 2、/meta 3、[] 4、() 5、* + ? {} 6、无符号 7、^ $ . 8、| 可参考资料: 1、http://en./wiki/Regular_expression 2、http://www./ 3、http://www./onlinepubs/009695399/basedefs/xbd_chap09.html 4、http://www.ibm.com/developerworks/cn/aix/library/au-regexp/ |
|
来自: liang1234_ > 《shell里的正则》