Php регулярное выражение, пытаясь исключить матч в другом матче

У меня есть это регулярное выражение для сканирования каждого цикла в моих представлениях, оно почти делает то, что я хочу, но не полностью. Я использую это регулярное выражение atm:

(?=({{each\s+([^{}]*)}}((?>(?!{{#?each).|(?1))*){{#each}}))

Когда у меня есть каждый цикл внутри другого каждого цикла, он показывает совпадения правильно, но я не хочу, чтобы каждый цикл был внутренним. Я планирую обработать этот 2-й матч рекурсивно. Вот пример HTML:

<div class="rows-container">
{{each infoItems}}
    <div class="row">
        <div class="row-key"></div>
    </div>

    <div class="sub-container">
    {{each subItems}}
        <div class="row">
            <div class="row-key"></div>
        </div>
    {{#each}}
    </div>
{{#each}}
</div>

<div class="rows-container">
{{each newsItems}}
    <div class="row">
        <div class="row-key"></div>
    </div>
{{#each}}
</div>

Будет давать следующие результаты:

//MATCH 1:
1. {{each infoItems}} <div class="row"> <div class="row-key"></div> </div> <div class="sub-container"> {{each subItems}} <div class="row flex-wrap"> <div class="row-key"></div> </div> {{#each}} </div> {{#each}}
2. infoItems
3. <div class="row"> <div class="row-key"></div> </div> <div class="sub-container"> {{each subItems}} <div class="row flex-wrap"> <div class="row-key"></div> </div> {{#each}} </div> 


//MATCH 2:
//This is the match I was trying to exclude:
4. {{each subItems}} <div class="row flex-wrap"> <div class="row-key"></div> </div> {{#each}}
5. subItems
6. <div class="row flex-wrap"> <div class="row-key"></div> </div> 

//MATCH 3:
7. {{each newsItems}} <div class="row"> <div class="row-key"></div> </div> {{#each}}
8. newsItems
9. <div class="row"> <div class="row-key"></div> </div> 

Как видите, все, что мне нужно, это: полный результат (который полезен для обратного вызова замены), имя массива и содержимое. Я пытался озадачить регулярным выражением,

{{each\s+([^{}]*)}}((?>(?!{{#?each).|(?1))*){{#each}}

Это даст только 2-й и 3-й, но не первый ='(я начинаю думать, что у меня в голове есть регулярные выражения этого комплекса, я теряю их понимание... но мне нравится подталкивать вещи.

Есть ли способ захватить 1-й и 3-й матч? с разрешением внутри каждого другого цикла (только 1 внутри требуется.. на данный момент), но не сопоставляя их. Небольшое объяснение или обратная связь будут очень благодарны, но у меня есть немного времени, и меня ждет головоломка.

0 ответов

Другие вопросы по тегам