У меня есть регулярное выражение, которое подходит для системы шаблонов, которая, к сожалению, кажется, разбивает apache (она работает в Windows) на некоторые скромно-тривиальные запросы. Я исследовал проблему, и есть несколько предложений по увеличению размера стека и т.д., Ни одна из которых, похоже, не работает, и мне не нравится работать с такими проблемами, увеличивая ограничения в любом случае, поскольку в целом это просто подтолкнуло ошибку к будущему.
В любом случае какие-либо идеи о том, как изменить регулярное выражение, чтобы сделать его менее вероятным?
Идея состоит в том, чтобы поймать самый внутренний блок (в данном случае {block:test}This should be caught first!{/block:test}
), который затем будет str_replace из начальных/конечных тегов и повторно запускает все это через регулярное выражение, пока не останется блоков.
Regex:
~(?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>
Это длинный выстрел, я полагаю.: (