微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式学习笔记之POSIX

POSIX规范

正则表达式两大流派:PCRE与POSIX规范。

之前笔记中的正则表达式记法,如\d、\s、\w之类的字符组简记法就是PCRE规范的正则表达式的特征。

POSIX的全称是Portable Operating System Interface for unix,它由一系列的规范构成,定义了UNIX操作系统应当支持功能,因此POSIX规范的正则表达式其实就是正则表达式的POSIX规范,它分为BRE(基本型正则表达式)和ERE(扩展型正则表达式)两大流派。

BRE流派

Linux下的vi、grep、sed工具属于BRE这一派,BRE中元字符(、)、{、}必须转义之后才具有特殊意义,比如a\{1,2\}才能匹配字符串a或aa。

BRE不支持+、?量词,多选结构和反向引用\1、\2。

GNU对BRE做了扩展,使之支持+、?、|,但使用时需转义。也支持\1、\2之类的反向引用。

ERE流派

Linux下的egrep、awk属于ERE流派。这一流派中使用元字符时不用转义,支持量词等。

现在的BRE和ERE的主要差异是元字符是否需转义。

POSIX字符组

PCRE流派中把[....]称为“字符组”;在POSIX中,它们叫做"方括号表达式",其作用与规则与常说的"字符组"完全一样。但是POSIX中的"方括号表达式"不支持使用\uxxxx的形式表示Unicode字符。即遵循POSIX规范的正则表达式无法用[\u4e00-\u9fff]来匹配"任意一个中文字符"。
POSIX自己也定义了字符组,称为"POSIX字符组",是一些事先定义好的组合,比如[:digit:]就是一个POSIX字符组,它等价于[0-9],[:alpha:]等价于[a-zA-Z]。此外PCRE中常见的\d、\w、\s在POSIX中没有定义。
POSIX字符组不能直接使用,只能用于方括号表达式内部,如[[:digit:]]、[[:alpha:]];POSIX字符组也可以与其他方括号表达式合用,如[a-zA-Z[:digit:]]、[^[:alpha:]]。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐