在某些情况下,PHP 似乎preg_match
对匹配重复字符有 3276 个字符的限制。
IE
^(.|\s){0,3276}$
工作,但^(.|\s){0,3277}$
没有。
它似乎并不总是适用,因为/^(.){0,3277}$/
作品。
我在 PHP 的文档或错误跟踪器中的任何地方都找不到提到的这一点。数字 3276 似乎有点奇怪,我唯一能想到的是它大约是 32767 的 1/10,这是有符号 16 位整数的限制。
preg_last_error()
返回 0。
我已经在http://www.phpliveregex.com/以及我的本地系统和网络服务器上重现了这个问题。
编辑:看起来我们从代码中得到“警告:preg_match():编译失败:正则表达式在偏移量 16 处太大”,所以它似乎与PHP preg_match_all 限制相同。
但是,正则表达式本身并不是很大...当您有重复组使其太大时,PHP 是否会进行某种扩展?