我想替换一些模板标签:
$tags = '{name} text {first}';
preg_match_all('~\{(\w+)\}~', $tags, $matches);
var_dump($matches);
输出是:
array(2) {
[0]=> array(2) {
[0]=> string(6) "{name}"
[1]=> string(7) "{first}"
}
[1]=> array(2) {
[0]=> string(4) "name"
[1]=> string(5) "first"
}
}
为什么有2个阵列?如何实现只有第二个?
解决方法:
那是因为你的正则表达式可以有多个匹配组 – 如果你有更多(..)你的阵列中会有更多的条目.第一个[0]总是整场比赛.
如果您想要数组的其他顺序,可以使用PREG_SET_ORDER作为preg_match_all的4.参数.这样做会导致以下结果
array(2) {
[0]=> array(2) {
[0]=> string(6) "{name}"
[1]=> string(7) "name"
}
[1]=> array(2) {
[0]=> string(4) "{first}"
[1]=> string(5) "first"
}
}
如果你在foreach循环中循环结果,这可能会更容易.
如果您只在第一场比赛中进行了比赛 – 您应该使用默认的PREG_PATTERN_ORDER并使用$matches [1]