preg_split导致连接重置

时间:2011-01-03 17:30:13

标签: php regex preg-split connection-reset

preg_split("/({{\s*(?:(?!}}).)+\s*}})/s", file_get_contents('data.txt'));

该行使Apache重置连接。 data.txt约为12 kB。

我做错了什么,我能以某种方式优化正则表达式吗?

2 个答案:

答案 0 :(得分:2)

请尝试使用此正则表达式:

/({{(?>(?:[^}]|}[^}])+)}})/s

主要改进:

  • (?>…) - atomic grouping以避免回溯
  • (?:[^}]|}[^}])+ - 没有环顾四周,没有非贪婪的匹配

答案 1 :(得分:0)

尝试将文件读入变量,而不是将其传递给preg_split。我认为这是file_get_contents problem rather than preg_split`。