6

我正在考虑在我正在开发的 C 库中实现正则表达式解析器。现在,问题是:有没有我可以逐字使用或尽可能少改动的开源代码?我对代码的期望是:

  • 它需要用 C(不是 C++)编写
  • 需要在gcc、mingw、M$VC下编译
  • 它不能依赖于任何第三方或特定于操作系统的头文件/库(即,编译它所需的一切都必须通过 gcc、mingw、M$VC 的基本安装随时可用
  • 如果它使用与 Perl 兼容的正则表达式语法(如 PHP 中的 PCRE),那就太好了。
  • 理想情况下,代码应该尽可能紧凑

您可以推荐任何现成的解决方案吗?我正在研究 C 的 PCRE,它看起来拥有 PHP 中可用的所有内容(哪些规则),但大小(1.4MB DL)有点吓人。你认为这是一个可靠的赌注吗?或者还有其他值得考虑的选择吗?

[编辑]

我正在开发的库是开源的,BSD 许可证。

4

4 回答 4

7

PCRE 之所以这么大,是因为正则表达式很难。无论如何,其中大部分是文档和支持代码;编译成目标代码时它要小得多。

于 2010-12-10T14:12:30.287 回答
6

RE2,谷歌正则表达式实现在线性时间(O(n)如果n是字符串的长度)进行匹配,PCRE 和大多数其他正则表达式引擎在最坏的情况下以指数时间运行。另一个值得注意O(n)的正则表达式匹配器是flex,但它在编译时需要所有可能的正则表达式。如果您正在寻找比 PCRE 更小的东西,请查看busybox中的正则表达式匹配器或lua中的模式匹配器。

于 2010-12-10T15:04:37.167 回答
3

如果您对 POSIX 正则表达式语法感到满意,您可以尝试 TRE。如果您想要 Perl 语法,Google 有一个值得一试的新实现。

于 2010-12-10T14:52:08.480 回答
2

PCRE 几乎是正则表达式实现的事实上的标准(有充分的理由)。不要担心大小,它很大,因为正则表达式实现很复杂。随便用吧。

于 2010-12-10T14:14:09.083 回答