gpt4 book ai didi

php - 匹配 {@layout=xxx} 的正则表达式

转载 作者:搜寻专家 更新时间:2023-10-31 21:23:36 24 4
gpt4 key购买 nike

我正在尝试通过创建自己的模板系统来了解模板系统的背后,但我遇到了一个问题...

我想按如下方式设置我的模板:

{@layout=layoutname}

{@content}
<p>This is a paragraph</p>
{@endcontent}

但我不知道如何匹配{@layout=并获取布局名称。

我试过:if (preg_match('/(\{\@layout=[a-z]+\})+/', $string, $matches)) { 有效.. 。 的种类。我想检查是否加载了超过 1 个布局以防止长文件中出现错误,并且想计算我有多少 $ 匹配项,如果找到超过 1 个匹配项则返回错误但不是获取所有找到的布局,而是返回相同的布局两次:

使用的字符串:

{@layout=app} 

{@layout=main}

{@content}
<h1>{[username]} profile</h1>
<img src="{[photoURL]}" class="photo" alt="{[name]}" width="100" height="100"/>
<b>Name:</b> {[name]}<br />
<b>Age:</b> {[age]}<br />
<b>Location:</b> {[location]}<br />
{@endcontent}

并使用我得到的表达式:

数组 ( [0] => {@layout=app} [1] => {@layout=app} )

有人可以帮我找到我的正则表达式吗?

最佳答案

您需要使用 preg_match_all 来获取同一字符串中的多个匹配项。在这种情况下,您需要检查 $matches[1],这将是一个捕获组结果数组。如果您有不止一种布局,它就会有不止一种元素,所以如果是这种情况,您就知道有不止一种布局声明。

我还将您的正则表达式更改为 /\{\@layout=([a-z]+)\}/ ,这将仅捕获布局名称。 $matches 看起来像:

array(2) {
[0]=>
array(1) {
[0]=>
string(20) "{@layout=layoutname}"
}
[1]=>
array(1) {
[0]=>
string(10) "layoutname"
}
}

因此,如果 count($matches[1]) > 1,您就知道有不止一个布局声明。否则,$matches[1][0] 是您的布局名称。

关于php - 匹配 {@layout=xxx} 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com