考虑以下字符串和Regex:
$string = 'xxx-zzzzzz-xxx';
preg_match('/(?<=xxx-)(.*)(?=-xxx)/', $string, $extract);
var_dump($extract);
输出:
array (size=2)
0 => string 'zzzzzz' (length=6)
1 => string 'zzzzzz' (length=6)
为什么我的数组大小为2,因为匹配的字符串只出现一次?如何只获取一个字符串或一个包含1个字符串的数组?提前谢谢。
答案 0 :(得分:3)
index=0
完全匹配,index=1
(及以后)是首次捕获的群组。如果您不想要捕获的组,请使用:
/(?<=xxx-).*(?=-xxx)/
即
preg_match('/(?<=xxx-).*(?=-xxx)/', $string, $extract);
print_r($extract);
答案 1 :(得分:3)
来自PHP Manual:
如果提供了
$matches
,则会填充搜索结果。$matches[0]
将包含与完整模式匹配的文本,$matches[1]
将获得与第一个捕获的文本匹配的文本 带括号的子模式,依此类推。
换句话说,matches[0]
返回完全匹配,数组中的其他键仅返回部分匹配(等于正则表达式中使用的()
的数量)。
请记住,preg_match只会匹配一个完整的结果;如果要返回给定字符串中的所有匹配项,请查看preg_match_all()
。