テンプレートシステムのマッチングを行う正規表現を持っていますが、残念ながら、いくつかの控えめなルックアップでApache(Windowsで実行されている)がクラッシュするようです。私はこの問題を調査しましたが、スタックサイズなどを増やすためのいくつかの提案がありますが、どれもうまくいかないようで、一般的にバグを将来に押しやるだけなので、制限を増やすことでそのような問題に対処するのは本当に好きではありません.
とにかく、正規表現を変更してファウルの可能性を低くする方法についてのアイデアはありますか?
アイデアは、最も内側のブロック (この場合は{block:test}This should be caught first!{/block:test}
) をキャッチして、開始タグと終了タグを str_replace し、ブロックがなくなるまで正規表現全体を再実行することです。
正規表現:
~(?P<opening>{(?P<inverse>[!])?block:(?P<name>[a-z0-9\s_-]+)})(?P<contents>(?:(?!{/?block:[0-9a-z-_]+}).)*)(?P<closing>{/block:\3})~ism
サンプル テンプレート:
<div class="f_sponsors s_banners">
<div class="s_previous">«</div>
<div class="s_sponsors">
<ul>
{block:sponsors}
<li>
<a href="{var:url}" target="_blank">
<img src="image/160x126/{var:image}" alt="{var:name}" title="{var:name}" />
</a>
{block:test}This should be caught first!{/block:test}
</li>
{/block:sponsors}
</ul>
</div>
<div class="s_next">»</div>
</div>
ロングショットだと思います。:(