您需要使用
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]
是您的布局名称。
感谢@SebastianProske,我找到了我正在寻找的东西:
if (preg_match_all('/\{\@layout=([a-zA-Z0-9]+)*\}/', $string, $matches)) {
这是正确的 if,它还返回名称和所有匹配项。