【发布时间】:2017-04-28 15:02:08
【问题描述】:
我正在尝试通过创建自己的模板系统来了解其背后的原理,但我遇到了一个障碍......
我想如下设置我的模板:
{@layout=layoutname}
{@content}
<p>This is a paragraph</p>
{@endcontent}
但我不知道如何匹配{@layout= 并获取布局名称。
我已经尝试过:if (preg_match('/(\{\@layout=[a-z]+\})+/', $string, $matches)) { 可以工作......有点。我想检查是否加载了超过 1 个布局以防止长文件中出现错误,并想计算我有多少 $matches 并在找到超过 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}
并使用该表达式我得到:
Array ( [0] => {@layout=app} [1] => {@layout=app} )
有人可以帮我找到我的正则表达式吗?
【问题讨论】:
-
您需要使用
preg_match_all来查找多个匹配项。数组中的两项指向整个匹配项 (0) 和匹配项的第一个捕获组 (1)。 -
那么如何更改它以仅返回布局名称?
-
还有。 @SebastianProske 您能否将其写为答案,以便我接受? :)