POSIX正则表达式规则
2012-12-29 11:16
309 查看
正则表达式(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.wikipedia.org/wiki/Regular_expression
2、http://www.regular-expressions.info/
3、http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html
4、http://www.ibm.com/developerworks/cn/aix/library/au-regexp/
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.wikipedia.org/wiki/Regular_expression
2、http://www.regular-expressions.info/
3、http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html
4、http://www.ibm.com/developerworks/cn/aix/library/au-regexp/
相关文章推荐
- POSIX(C语言)正则表达式规则
- 16.1 POSIX扩展库正则表达式函数
- POSIX正则表达式 验证电子邮件地址
- 正则表达式语法及其规则。。。。
- RegExp对象和常用正则表达式规则
- 正则表达式的规则
- ISAPI_Rewrite 2.9与3.0 对网站目录进行301重定向的正则表达式规则
- 正则表达式中的基本正则规则详解01
- C#正则表达式语法规则详解
- 正则表达式规则(九)
- “正则表达式”应当称为“规则表达式”
- 正则规则和常用正则表达式
- Hadoop 和 spark 读取多个文件通配符规则(正则表达式)joe
- Python中正则表达式的匹配规则
- posix和perl标准的正则表达式区别
- Java正则表达式规则
- windows下文件名命名规则的正则表达式
- 正则表达式匹配邮箱规则
- . 正则表达式规则
- 简述正则表达式匹配规则