正则表达式的最大长度是多少?

时间:2014-08-14 14:46:00

标签: php regex

我想知道:正则表达式(本身)是否有限? 我不是说我如何缩短字符串长度,而是正则表达式本身。

在数组中有几百个值我尝试从中构建正则表达式(目前只有这一半是600多个字符),但还有更多值。

因此,我的正则表达式将来可能会有1,000或甚至更长。 它仅受PHP字符串长度限制的限制还是还有其他内容在起作用?

1 个答案:

答案 0 :(得分:7)

编辑:正如@Jonny 5指出的那样,我的测试存在缺陷。但是,正确的答案是32767,或者如果你看到我的答案的第二位,64k。

我刚刚在本地计算机上使用以下方法对其进行了测试:

$str = str_repeat('a',  256*1024);
$subject = "";
$pattern = '/^' . $str . '/';
preg_match($pattern, $subject, $matches);

我得到了:

  

警告:preg_match():编译失败:偏移量为262145时正则表达式太大

事实上,如果你愿意,你可以拥有更大的。检查来源,我追踪this

/* The value of LINK_SIZE determines the number of bytes used to store links
   as offsets within the compiled regex. The default is 2, which allows for
   compiled patterns up to 64K long. This covers the vast majority of cases.
   However, PCRE can also be compiled to use 3 or 4 bytes instead. This allows
   for longer patterns in extreme cases. On systems that support it,
   "configure" can be used to override this default. */
#ifndef LINK_SIZE
#define LINK_SIZE 2
#endif

所以,如果你想从源代码编译,那么就把自己搞定。