Php正则表达式,尝试排除其他匹配中的匹配

时间:2017-05-24 00:39:40

标签: php regex multiple-matches

我有这个正则表达式来扫描我的视图中的每个循环,它几乎完成我想要的,但不完全。我正在使用这个正则表达式atm:

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

当我在另一个每个循环中有一个每个循环时,它会正确显示匹配,但我不想让每个循环内部匹配。我打算递归处理这第二场比赛。以下是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> 

正如您所看到的,我需要的是:完整的结果(对于替换回调很有用),数组名称和&amp;内容。我试着用正则表达式来解释,

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

这只会给第二个&amp;第三个,但不是第一个=&#39;(我开始认为我在这个复杂的正则表达式之上,失去了对它们的理解......但我喜欢推动事情。

有没有办法捕捉第一场和第三场比赛?允许其他每个循环内部(现在只需要1个内部..)但不匹配它们。 一点点的解释或反馈将非常感激,但我有一些时间在我的手上,我在谜题。

0 个答案:

没有答案