在PHP中对长正则表达式使用FILTER_VALIDATE_REGEX时出现分段错误

在PHP中对长正则表达式使用FILTER_VALIDATE_REGEX时出现分段错误,php,Php,运行以下PHP代码时,我得到一个“分段错误:11”: 如果使用较短的正则表达式,则不会出现任何分段错误: $pattern = '#^([\+-]?\d*)$#'; $horas = "2012-05-15 11:23:56"; echo filter_var($horas, FILTER_VALIDATE_REGEXP, array("options" => array('regexp' => $pattern))) ? "1" : "2"; 在这种情况下,值为“2” 我决定使用

运行以下PHP代码时,我得到一个“分段错误:11”:

如果使用较短的正则表达式,则不会出现任何分段错误:

$pattern = '#^([\+-]?\d*)$#';
$horas = "2012-05-15 11:23:56";
echo filter_var($horas, FILTER_VALIDATE_REGEXP, array("options" => array('regexp' => $pattern))) ? "1" : "2";
在这种情况下,值为“2”

我决定使用strace(或者dtruss,因为我使用的是OSX)并比较不同正则表达式的输出。虽然我不知道从这里走到哪里,但我意识到最初的脚本就停在这里:

open("/opt/local/lib/libmemcached.9.dylib\0", 0x0, 0x0)      = 3 0
pread(0x3, "\317\372\355\376\a\0", 0x1000, 0x0)      = 4096 0
mmap(0x103532000, 0x24000, 0x5, 0x12, 0x3, 0x100001F)        = 0x3532000 0
mmap(0x103556000, 0x1000, 0x3, 0x12, 0x3, 0x100001F)         = 0x3556000 0
mmap(0x103557000, 0x15098, 0x1, 0x12, 0x3, 0x100001F)        = 0x3557000 0
close(0x3)       = 0 0
stat64("/opt/local/lib/libsasl2.2.dylib\0", 0x7FFF61CDD430, 0x7FFF61CDE2B0)      = 0 0
open("/opt/local/lib/libsasl2.2.dylib\0", 0x0, 0x0)      = 3 0
pread(0x3, "\317\372\355\376\a\0", 0x1000, 0x0)      = 4096 0
mmap(0x10356D000, 0x14000, 0x5, 0x12, 0x3, 0x100001F)        = 0x356D000 0
mmap(0x103581000, 0x1000, 0x3, 0x12, 0x3, 0x100001F)         = 0x3581000 0
mmap(0x103582000, 0x3848, 0x1, 0x12, 0x3, 0x100001F)         = 0x3582000 0
close(0x3)       = 0 0
__sysctl(0x7FFF61CDE14C, 0x2, 0x7FFF61CDE138)        = 0 0
我不确定这是否有帮助,或者这是否与libsasl有关。 我最近使用macports升级了php5、apache2和其他一些软件包。此代码用于在升级之前工作。 这是php版本的输出:

PHP 5.3.12(cli)(构建日期:2012年5月11日14:31:01) 版权所有(c)1997-2012 PHP集团 Zend Engine v2.3.0版权所有(c)1998-2012 Zend Technologies Xdebug v2.2.0版权所有(c)2002-2012,作者:德里克·雷特汉斯 Suhosin v0.9.33,版权(c)2007-2012,由SektionEins GmbH提供


提前谢谢你。

对此我很抱歉,坦杜,但那没有用。正则表达式并不完美,但这不是主要问题……尝试增加到某个荒谬的值,如果这样可以修复它,则继续减少,直到找到一个合理的限制。PHP通过允许它segfault来处理堆栈溢出的各种实例,我有无限循环和递归。@C-16您可能想查看x修饰符(请参阅)我尝试了一些不同的版本,所有这些都看起来不错。DaveRandom我甚至删除了任何内存限制,但仍然得到Segmentation fault:11。tandu我不知道x修饰符在这种情况下有什么帮助。该代码在升级php之前正常工作:/
open("/opt/local/lib/libmemcached.9.dylib\0", 0x0, 0x0)      = 3 0
pread(0x3, "\317\372\355\376\a\0", 0x1000, 0x0)      = 4096 0
mmap(0x103532000, 0x24000, 0x5, 0x12, 0x3, 0x100001F)        = 0x3532000 0
mmap(0x103556000, 0x1000, 0x3, 0x12, 0x3, 0x100001F)         = 0x3556000 0
mmap(0x103557000, 0x15098, 0x1, 0x12, 0x3, 0x100001F)        = 0x3557000 0
close(0x3)       = 0 0
stat64("/opt/local/lib/libsasl2.2.dylib\0", 0x7FFF61CDD430, 0x7FFF61CDE2B0)      = 0 0
open("/opt/local/lib/libsasl2.2.dylib\0", 0x0, 0x0)      = 3 0
pread(0x3, "\317\372\355\376\a\0", 0x1000, 0x0)      = 4096 0
mmap(0x10356D000, 0x14000, 0x5, 0x12, 0x3, 0x100001F)        = 0x356D000 0
mmap(0x103581000, 0x1000, 0x3, 0x12, 0x3, 0x100001F)         = 0x3581000 0
mmap(0x103582000, 0x3848, 0x1, 0x12, 0x3, 0x100001F)         = 0x3582000 0
close(0x3)       = 0 0
__sysctl(0x7FFF61CDE14C, 0x2, 0x7FFF61CDE138)        = 0 0