关于正则表达式解析器的C实现的建议

时间:2010-12-10 14:09:09

标签: c regex parsing recommendation-engine

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

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

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

[编辑]

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

4 个答案:

答案 0 :(得分:7)

PCRE太大了,因为正则表达式 hard 。而且大部分都是文档和支持代码;编译成目标代码时,它要小得多。

答案 1 :(得分:6)

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

PCRE几乎是正则表达式实现的事实标准(有充分理由)。不要担心大小,它很大,因为正则表达式实现很复杂。无论如何都要使用它。