肇庆高端模板建站,南昌网站建设哪家就好,滨州公司网站建设,急招程序员目前正则表达式主要有两大流派#xff08;Flavor#xff09;#xff1a;POSIX 流派与 PCRE 流派。
1、 POSIX 流派
POSIX 规范定义了正则表达式的两种标准#xff1a;
BRE 标准#xff08;Basic Regular Expression 基本正则表达式#xff09;#xff1b;ERE 标准FlavorPOSIX 流派与 PCRE 流派。
1、 POSIX 流派
POSIX 规范定义了正则表达式的两种标准
BRE 标准Basic Regular Expression 基本正则表达式ERE 标准Extended Regular Expression 扩展正则表达式。
我们现在使用的 Linux 发行版大多都集成了 GNU 套件。GNU 在实现 POSIX 标准时做了一定的扩展主要有以下三点扩展。
GNU BRE 支持了 、?但转义了才表示特殊含义即需要用\、\?表示。GNU BRE 支持管道符多选分支结构同样需要转义即用 \|表示。GNU ERE 也支持使用反引用和 BRE 一样使用 \1、\2…\9 表示。
浅黄色背景是 BRE 和 ERE 不同的地方三处天蓝色字体是 GNU 扩展。 POSIX 流派还有一个特殊的地方就是有自己的字符组叫 POSIX 字符组。这个类似于我们之前学习的 \d 表示数字\s 表示空白符等POSIX 中也定义了一系列的字符组。具体的清单和解释如下所示 2、 PCRE 流派
目前大部分常用编程语言都是源于 PCRE 标准这个流派显著特征是有\d、\w、\s 这类字符组简记方式。
虽然 PCRE 流派是与 Perl 正则表达式相兼容的流派但这种兼容在各种语言和工具中还存在程度上的差别这包括了直接兼容与间接兼容两种情况。Perl 语言中的正则表达式在不断改进和升级之中其他语言和工具不可能完全做到实时跟进与更新。
直接兼容PCRE 流派中与 Perl 正则表达式直接兼容的语言或工具。比如 Perl、PHP preg、PCRE 库等一般称之为 Perl 系。间接兼容比如 Java 系包括 Java、Groovy、Scala 等、Python 系包括 Python2 和 Python3、JavaScript 系包括原生 JavaScript 和扩展库 XRegExp、.Net 系包括 C#、VB.Net 等等。
3、在 Linux 中使用正则
在遵循 POSIX 规范的 UNIX/LINUX 系统上按照 BRE 标准 实现的有 grep、sed 和 vi/vim 等而按照 ERE 标准 实现的有 egrep、awk 等。
在 UNIX/LINUX 系统里 PCRE 流派与 POSIX 流派的对比。 其实有一些工具实现同时兼容多种正则标准比如 grep 和 sed。如果在使用时加上 -E 选项就是使用 ERE 标准如果加上 -P 选项就是使用 PCRE 标准。
使用 ERE 标准
grep -E [[:digit:]] access.log使用 PCRE 标准
grep -P \d access.log
执行 man grep 可以看到选项 -G 是指定使用 BRE 标准默认-E 是 ERE 标准-P 是 PCRE 标准。所以在使用具体工具时你通过这个方法查一下命令的说明就好了。 此文章为8月Day24学习笔记内容来源于极客时间《正则表达式入门课》推荐该课程。