【发布时间】:2011-12-08 15:48:11
【问题描述】:
当我尝试以下操作时:
$searchText = preg_quote($searchText, '/');
$remarks = preg_replace('/'.$searchText.'/i', '<span class="searchText">$0</span>', $remarks);
我收到以下错误消息:
正则表达式在偏移量 0 处太大
我不知道这意味着什么,为什么我会得到它或如何解决它。 当我用谷歌搜索此错误消息时,我得到了对我什至找不到的 php.ini 设置的引用。
【问题讨论】:
-
“太大”是一个非常明确的信息,也是当代语言中的常用短语 - 你确定你“没有任何线索”吗?
-
显然你的正则表达式太大了。如果不了解该正则表达式是什么,我们将无法帮助您。
-
我不明白为什么我的正则表达式会太大。上面的行在一次处理单个数据库记录的循环中。 $searchText 很小,用户输入的文本最多可能有十几个字符。 $remarks 来自一个 VARCHAR2(4000) 字段,所以我看不到它是如何超过 65,000 的,除非每次循环都需要设置一些东西。 $remarks 不会每次都通过循环连接。
-
我还应该提到,当我添加 preg_quote() 行时问题就开始了。我补充说,因为一些用户正在输入正斜杠字符作为导致问题的搜索字符串的一部分。我知道 preg_quote() 会转义任何正则表达式特殊字符,但我看不出它如何将最多 4000 个字符的内容扩展到超过 65,000 个。
标签: php regex preg-replace