1

我一直在几个服务器中使用标准的 UNIX 版本的正则表达式,这些服务器必须对错误具有很强的弹性。多年来,我发现了一些案例,其中要么是用户输入了格式错误的正则表达式,要么是目标字符串中的一些奇怪字符导致了分段违规等,从而导致服务器崩溃。对于我们的系统,这是不可接受的。

在这些格式错误的模式或匹配字符串中是否有一个版本的正则表达式只会导致错误而不会使服务器崩溃?

由于在检查这些模式时此代码主要是多线程的,因此我不想使用 setjmp longjmp 等。

4

1 回答 1

2

RE2Google 最初为 Go 语言开发了C++ 正则表达式库,但现在已经为大多数脚本语言(如 Perl、Python)提供了包装器,它声称:

RE2 使用自动机理论来保证正则表达式搜索在与输入大小成线性关系的时间内运行。RE2 实现了内存限制,因此可以将搜索限制为固定的内存量。RE2 被设计为使用较小的固定 C++ 堆栈占用空间,无论它必须处理什么输入或正则表达式;因此 RE2 在线程堆栈不能任意增长的多线程环境中很有用。

因此,似乎可以选择任何三个:快速、可靠、小型。

于 2012-12-05T10:00:36.353 回答