PHP Regex返回2个相同字符串的数组

时间:2015-07-16 14:02:51

标签: php regex

考虑以下字符串和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个字符串的数组?提前谢谢。

2 个答案:

答案 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()