【发布时间】:2012-12-05 08:48:55
【问题描述】:
我一直在几个服务器中使用标准的 UNIX 版本的正则表达式,这些服务器必须对错误具有很强的弹性。多年来,我发现了几种情况,其中要么是用户输入了格式错误的正则表达式,要么是目标字符串中的一些奇怪字符导致了分段违规等,从而导致服务器崩溃。对于我们的系统来说,这是不可接受的。
在这些格式错误的模式或匹配字符串中是否有一个版本的正则表达式只会导致错误而不会使服务器崩溃?
由于在检查这些模式时这段代码主要是多线程的,所以我不想使用 setjmp longjmp 等。
【问题讨论】:
-
malformed regex- 编译正则表达式并检查异常some weird characters in the string- 你如何清理输入?服务器如何“崩溃”?是软件吗?还是整个操作系统? -
我猜你可以期待
std::basic_regex和相关的非常强大。 -
@Angew:如果用户输入
^(x*x*)*$作为他的正则表达式并让它在xxxxxxxxxxxxxxxxxxxxxxy上松开,则不会。 -
@DavidAllanFinch 没问题 :)
-
@DavidAllanFinch:它将最终返回。可能是几百年后:P 如果服务器进程崩溃 - 检查它是否是由 1)未处理的异常 2)需要很长时间才能返回的正则表达式