警告:preg_match():内部pcre_fullinfo()

Pee*_*Haa 17 php regex codepad

我有以下工作代码:

$test = '123456';

$int = preg_match('/^\d+$/', $test, $matches);

print_r(array($int, $matches));
Run Code Online (Sandbox Code Playgroud)

但是,当我在键盘上执行它时,我得到错误:

警告:preg_match():第5行的内部pcre_fullinfo()错误-3

但代码是在我自己的机器上运行(代码应该是好的恕我直言).

我需要在将来分发我的代码,所以如果它会因某些配置而中断会很糟糕.那么键盘打破它的原因是什么?

Thi*_*ter 30

通过键盘执行的代码在非常有限的环境中运行:

代码执行由基于geordi的主管处理.策略是在ptrace下运行所有​​内容,不允许或忽略许多系统调用.编译器和最终可执行文件都在chroot jail中执行,具有严格的资源限制.主管是用Haskell编写的.

虽然你没想到打破正则表达式引擎,但是pcre库很可能在内部使用被键盘环境阻止的东西.没有生产系统使用这种严格的限制,因此您应该可以安全地在您的应用程序中使用该代码.

错误代码代表"PCRE_ERROR_BADOPTION -的价值什么是无效的".但是,发生错误的PHP源代码中的代码rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);使用常量来表示什么.所以它显然意味着pcre库在键盘上被破坏了.

如果你想要完全安全,可以使用libpcre编写一个小的C程序,在同一个正则表达式上调用该函数.