【问题标题】:Small Template-system, end of /if does not detect correct小型模板系统,/if 结尾未检测到正确
【发布时间】:2021-07-27 11:58:27
【问题描述】:

如果我一个人写下一行,他会无缘无故地删掉它,所以...:

你好,

我需要帮助,我不知道。

我被困在一个应该做一些 foreach 和 if 语句的小型 TPL 系统上。 我在 PHP 中执行此操作,但如果这相关,我会这样做。

https://regexr.com/62ho9 在这里你可以看到我的问题。我希望正则表达式在第二个 {/if} 之前结束,但事实并非如此。是否有任何可能的解决方案来使用正则表达式来做到这一点?

如果没有,您可能对 PHP 做我想做的事有一个好主意吗?因为我没有想法。

(?<={if \!TEST})([\s\S]*?)(?={\/if})
    <a class="dropdown-item" href="#">
        {if !TEST}
          {USERNAME}
          {if !TEST}
            HI
          {/if} 
          klöaksdölsa
        {/if}

        asdas

        {if !TEST}asd{/if}
    </a>

目前我使用 {if ID statement} LOREM {/if ID} 但更优雅的解决方案是没有 ID:D

(测试:大家好)

【问题讨论】:

    标签: php html regex


    【解决方案1】:

    是的,你可以在 PHP 正则表达式中使用递归,你可以使用的正则表达式是

    (?s){if\s+!TEST}((?:(?!{(?:if\s+!TEST|\/if)}).|(?R))*){\/if}
    

    请参阅regex demo。您只需要在获得比赛后获得 Group 1 的值。

    详情

    • (?s) - s 内联标志
    • {if\s+!TEST} - {if,一个或多个空格,!TEST}
    • ((?:(?!{(?:if\s+!TEST|\/if)}).|(?R))*) - 第 1 组:零次或多次出现
      • (?!{(?:if\s+!TEST|\/if)}). - 任何不是 {if !TEST}{/if} 字符序列起点的字符
      • |
      • (?R) - 整个模式递归
    • {\/if} - {/if} 子字符串。

    【讨论】:

    • 非常感谢!我必须学习更多的正则表达式。我不知道你可以用普通的正则表达式来做到这一点.. :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多