ОБНОВЛЕНИЕ
Так что я до сих пор возился с этим и дошел до поиска всех экземпляров тегов, хотя я бы предпочел ПРОСТО найти самый сложный экземпляр, какжизнь была бы проще таким образом ... В любом случае вот что я получил ..
/(({{)(?:(?=([^\/][^ ]*?))\3|(\/[\w])))([a-zA-Z0-9\$\'\"\s\#\%\^\&\!\.\_\+\=\-\\\*\(\)\ ]+?}})/
Есть ли ЛЮБЫЙ гуру регулярных выражений, который мог бы дать мне несколько указателей или регулярное выражение, имитирующее то, что мне нужно?Который получает только самый глубокий сложенный экземпляр {{tag}}, который заканчивается следующим образом {{// tag}}
ORIGINAL
Хорошо, так что у меня естьпроблема, которую я видел у других, но с другим подходом к ней .. Или так я думал .. Поэтому мне любопытно, может ли кто-нибудь еще помочь мне решить эту проблему дальше ..
У меня полная база данныхшаблонов, с которыми мне нужно работать в PHP, эти шаблоны создаются и используются другой системой, поэтому их нельзя изменить.При этом к этим шаблонам добавлены теги стиля иерархии.Что мне нужно сделать, это получить эти шаблоны из базы данных, а затем программно найти эти теги, их имя функции (или имя тега) и их внутреннее содержимое, а также все, что следует за именем функции (тега) в скобках.Пример одного из этих тегов: {{FunctionName some (otherStuff)! Here}} Некоторый контент находится внутри, и он заканчивается {{/ FunctionName}}
Это - то, где это становится более забавным, шаблоныесть другой случайный тег, который, как я предполагаю, является «переменным» стилем этих тегов, так как они всегда имеют одинаковый синтаксис.Это выглядит примерно так: $ {RandomTag}, но бывают случаи, когда есть стиль функции 1, но без конечного тега, например .. {{RandomLoner}}
Пример шаблона ...
{{FunctionTag (Condition?)}}
<div>This is an {{CheckOfSomeSort someTimesThese !orThese}}
example of some {{Random}} data
{{/CheckOfSomeSort}} that will be ${worked} on</div>
{{/FunctionTag}}
Хорошо, это ни в коем случае не реальный шаблон, но он следует всем правилам, которые я видел до сих пор.
Теперь я пробовал разные вещи с regex и preg_match_all, чтобы вытащитьспички, и получить каждый из них в хороший массив.До сих пор я получил следующее (использовал его на примере шаблона, чтобы убедиться, что он работает до сих пор)
Array
(
[0] => Array
(
[0] => {{CheckOfSomeSort someTimesThese !orThese}}example of some datas{{/CheckOfSomeSort}}
[1] => {{CheckOfSomeSort someTimesThese !orThese}}
[2] => CheckOfSomeSort
[3] => example of some data
[4] => {{/CheckOfSomeSort}}
)
)
Я пробовал пару подходов (мне потребовалось почти 8 часов, чтобы добраться до)
/({{([^\/].[^ ]*)(?:.[^ ][^{{]+)}})(?:(?=([^{{]+))\3|{{(?!\2[^}}]*}}))*?({{\/\2}})/
AND, more recently...
/({{([^\/].[^ ]*)(?:.[^ ][^{{]+)}})((?:(?!\{\{|\}\}).)++|(?R)*)({{\/\2}})/
Я ни в коем случае не гуру с регулярным выражением, я на самом деле просто изучил его за последний день или около того, пытаясь заставить это работать.Я гуглил по этому поводу и понимаю, что регулярное выражение не предназначено для вложенных вещей, но (? R), кажется, делает трюк на простых примерах скобок, которые я видел в интернетах, но они всегда учитывают только вещи между{и} или (и) или <и>.Прочитав почти весь веб-сайт с информацией о регулярных выражениях и играя, я пришел к этим двум версиям.
Так что, что мне НУЖНО сделать (я думаю), сначала нужно будет выполнить регулярное выражение из тега иерархии DEEPEST, иработать его выход (если я могу сделать это с помощью php, это нормально для меня).Я думал найти самый глубокий слой, получить его данные и работать в обратном направлении, пока все содержимое не окажется в 1 толстом массиве.Я предположил, что это то, что ($ R) собирался сделать для меня, но это не так.
Так что любая помощь в том, что я пропускаю, будет большой, также примите во внимание, что моя, кажется, имеетпроблемы с {{}}, которые НЕ имеют конечной версии.Так что, как и мой {{Случайный}} пример, был удален ради того, чтобы я проанализировал пример массива.Я чувствую, что эти теги вместе с тегами $ {} можно оставить в покое (если бы я знал, как это сделать с помощью регулярных выражений) и просто оставить в тексте там, где они есть.Я более или менее интересуюсь функциями и передачей их данных в многомерный массив для дальнейшей работы с ними.
Извините за длинный пост, я просто всю ночь бился с этим головой.Я начал с предположения, что это будет немного проще ... Пока я не понял теги, где вложенные: /
Любая помощь приветствуется!Спасибо!