regex 为什么没有正则表达式标准?

s4chpxco  于 2023-05-01  发布在  其他
关注(0)|答案(8)|浏览(215)

我知道perl正则表达式是一个次要的事实上的标准,但是为什么没有人提出一套通用的标准符号、语法和行为呢?

wsxa1bj1

wsxa1bj11#

IEEE有一个与POSIX相关的标准。真实的的问题是 “为什么不是每个人都遵循它”?答案可能是,它不像PCRE(Perl兼容正则表达式)那样复杂,涉及贪婪匹配等等。

juzqafwq

juzqafwq2#

实际上,有一个正则表达式标准(POSIX),但它很糟糕。因此,人们不断扩展RE引擎以满足应用的需要。PCRE(Perl兼容正则表达式)是一个伪标准,用于与Perl的RE引擎兼容的正则表达式。这一点特别重要,因为您可以将Perl的引擎嵌入到其他应用程序中。

gkn4icbw

gkn4icbw3#

因为制定标准很难。几乎不可能让足够多的人同意任何事情,使其成为官方标准,更不用说像regex这样复杂的东西了。事实上的标准要容易得多。
举个例子:HTML 5预计要到2022年才会成为官方标准。但是规范草案已经可用,标准的主要特性将在标准正式发布之前很久就开始出现在浏览器中。

jgovgodb

jgovgodb4#

我对此进行了研究,但找不到任何具体的东西。我的猜测是,这是因为正则表达式是一个经常在工具上工作的工具,因此它必须具有特定于平台和工具的扩展。
例如,在VisualStudio中,可以使用正则表达式查找和替换源代码中的字符串。他们添加了:i这样的东西来匹配标识符。在其他工具的其他平台上,标识符可能不是适用的概念。事实上,也许其他平台和工具保留冒号字符来转义表达式。
这样的差异使得这个标准化特别困难。

ctehm74n

ctehm74n5#

Perl是第一个(或者说是接近第一个),虽然它是Perl,我们都喜欢它,但它太老了,有些人觉得它需要更多的润色(我是说,它需要更多的润色)。即特征)。这就是新类型出现的地方。
它们开始规范化,中使用的正则表达式。NET与其他语言中使用的正则表达式非常相似,我认为慢慢地人们开始统一,但有些人已经习惯了Perl的方式,不想改变。

nkkqxpd9

nkkqxpd96#

只是猜测:从来没有一个版本流行到足以被认为是规范标准,也没有标准的实现。每个来重新实施它的人都有自己的想法,如何使它“更好”。

yi0zb3m4

yi0zb3m47#

口味

www.example www.example.com
现在您已经对正则表达式和一些使用它们的不同工具有了一些了解,您可能认为我们已经准备好在任何地方使用它们了。但是,即使对第一章中的egrep版本和前一章中的Perl和Java版本进行简单的比较,也会发现正则表达式及其使用方式会因工具的不同而有很大的差异。当在宿主语言或工具的上下文中查看正则表达式时,需要考虑三个广泛的问题:
·支持哪些元字符,以及它们的含义。通常称为正则表达式的“风味”。“
·正则表达式如何与语言或工具“交互”,例如如何指定正则表达式操作,允许哪些操作,以及它们对哪些文本进行操作。
·正则表达式引擎实际上如何将正则表达式应用于某些文本。语言或工具设计者用来实现正则表达式引擎的方法对任何给定正则表达式的预期结果有很大的影响。

去哪里找

  • man 7 regexman 7 standards、POSIX基本和扩展
  • 关于vim,请参阅:help perl-patterns:help two-engines(如果您好奇,请尝试:help ft-posix-syntax,但不是那么相关)
  • 对于python,请参见pydoc repydoc posix
1u4esq0p

1u4esq0p8#

因为太多的人害怕正则表达式,所以正则表达式还没有完全普及到足够多的明智的人既能想到这个想法,又能实现它。
即使一个标准团体真的成立了,并试图统一不同的风格,太多的人会固执地争论他们自己的方法,不管是否更好,因为很多程序员都是这样令人讨厌的。

相关问题