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

Php 正则表达式的最大长度是多少?,php,regex,Php,Regex,我想知道:正则表达式(本身)是否受到某种限制? 我不是指如何缩短字符串长度,而是指正则表达式本身 在一个数组中有几百个值,我试图从中构建正则表达式(目前只有这一半是600+个字符),但还有更多的值要来 因此,我的正则表达式将来可能有1000个或更多的长度。 它只是受到PHP字符串长度限制,还是有其他因素在起作用?编辑:正如@Jonny 5所指出的,我的测试有缺陷。然而,正确答案是32767,或者如果你看到我答案的第二位,64k 我刚刚在我的本地机器上使用以下工具对其进行了测试: $str = s

我想知道:正则表达式(本身)是否受到某种限制? 我不是指如何缩短字符串长度,而是指正则表达式本身

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

因此,我的正则表达式将来可能有1000个或更多的长度。
它只是受到PHP字符串长度限制,还是有其他因素在起作用?

编辑:正如@Jonny 5所指出的,我的测试有缺陷。然而,正确答案是32767,或者如果你看到我答案的第二位,64k

我刚刚在我的本地机器上使用以下工具对其进行了测试:

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

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

事实上,如果你愿意,你可以有更大的。查看来源,我找到了:


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

为什么你甚至需要一个长正则表达式?优化正则表达式匹配动态表达式,因为它很短,而且仍然可以出色地工作@如果你愿意,我们可以在聊天室里讨论这个。但我认为这与这个问题无关。另外,如果您打算缩放表达式的大小,这是否会对性能产生影响?正如我经常说的,“如果您有其他可用选项,请尝试不使用正则表达式。”例如,您可以不使用正则表达式轻松地检查字符串的长度。regEx确实很强大,但它们并不总是最好的option@Flosculus是的,我想会的。但也与这个问题无关。我有一个变通办法,但一个同事告诉我这样做。(因为我的方法未经测试)-这种方法(正则表达式)目前也未经测试,但这是另一个故事。知道它很有用,+1。你知道这是否受到机器的限制吗?我已经检查过了,它对测试的多个版本给出了相同的响应。也许有一个可配置的选项,也许没有。@Flosculus,如果您感兴趣,请参阅我编辑的答案的后半部分。删除我的答案,只是:)有趣的阅读。谢谢你的回答。:)
/* 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