我们在课堂上讲解sed,我想了解sed使用正则表达式引擎的方式。每个程序(sed、awk、grep等)是否都使用自己编程的正则表达式引擎,还是有一个正则表达式引擎工具/库/函数,由开发sed、grep等工具的人员在其代码中实现?这个引擎是内置于操作系统中,然后由使用它的工具调用吗?我感觉了解这些将有助于我理解正则表达式所达到的标准化水平。
你是谁制造的,正则表达式引擎?你的源代码在哪里?
sed
和grep
都能理解GNU基本正则表达式符号,这是POSIX基本正则表达式标准的一种实现。POSIX只是Unix系统应该遵循的标准,但它可以以任何方式实现。此外,sed
使用-r
,grep
使用-e
或egrep
可以理解GNU扩展正则表达式符号,并有自己的实现。请参见http://www.regular-expressions.info/gnu.html,了解基本和扩展的正则表达式详细信息。PCRE
和PCRE2
,这是Perl兼容正则表达式。这是一个用C/C++实现的完整库,可以被其他C/C++软件用作标准实现。PHP和pgrep
使用它。grep
也可以使用-P
,前提是grep
已经编译了PCRE支持。(不确定,但我认为在这种情况下,grep -P
只是在内部调用pgrep
。)请参阅http://www.regular-expressions.info/pcre.html和http://www.regular-expressions.info/pcre2.html,了解这些内容的详细信息。sed
,grep
和awk
所共享。该源代码可以在Gnulib上获得,网址是http://www.gnu.org/software/gnulib。在那之后,您可以尝试学习其他实现的更高级功能。
grep
也能理解不止一种正则表达式语法。因此,您不能指望正则表达式在各处都被处理得完全相同(正则表达式在成为实现之前是想法),但了解典型的实现将帮助您快速掌握其他变体,就像知道如何在一种语言中编程会帮助您更快地学习下一种语言一样。 - Fredman regcomp
和man regexec
以获取有关与您的操作系统一起提供的 C 库 regex 功能的文档。在 BSD 上,通常还有一个man re_format
,或者在 GNU 系统上,有一个man 7 regex
,以提供有关语法的文档,这些语法是您的操作系统设施支持的(而不是由第三方库或语言运行时安装的各种其他实现)。 - Charles Duffy