2011-01-03 12 views
0
preg_split("/({{\s*(?:(?!}}).)+\s*}})/s", file_get_contents('data.txt')); 

この行では、Apacheが接続をリセットします。 data.txtは約12kBです。preg_splitの結果が接続リセット

私は間違っているのですが、何とか正規表現を最適化できますか?

+0

どのバージョンのPHPですか? – ircmaxell

+0

何で分けていますか? – BoltClock

+0

PHP 5.2.11、5.3.3および5.3.4 – Znarkus

答えて

2

ではなく、この正規表現を試してみてください:

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

を主な改善点:

  • (?>…)からatomic grouping
  • (?:[^}]|}[^}])+をバックトラックを避けるために - ノールックまわり、無非貪欲なマッチング
+0

私はそれが:( – Znarkus

+0

を働かなかったことを言って申し訳ありませんが...しかし、最適化のために大きな感謝:) – Znarkus

0

preg_splitするためにそれを渡すよりも、変数にファイルを読み込む試してみてください。私はそれがfile_get_contents problem rather than preg_split`だと思います。

+0

おかげで、それは何のトラブル読みがありませんでした変数へのファイル – Znarkus

関連する問題