PHP正则表达式返回2个相同字符串的数组

PHP正则表达式返回2个相同字符串的数组,php,regex,Php,Regex,考虑以下字符串和正则表达式: $string = 'xxx-zzzzzz-xxx'; preg_match('/(?<=xxx-)(.*)(?=-xxx)/', $string, $extract); var_dump($extract); 既然匹配的字符串只出现一次,为什么数组大小为2?我该怎么做才能得到一个字符串或一个包含1个字符串的数组?提前感谢。索引=0是完整匹配,而索引=1是第一个捕获的组。如果您不希望捕获组,则只需使用: /(?<=xxx-).*(?=-xxx)/

考虑以下字符串和正则表达式:

$string = 'xxx-zzzzzz-xxx';
preg_match('/(?<=xxx-)(.*)(?=-xxx)/', $string, $extract);

var_dump($extract);

既然匹配的字符串只出现一次,为什么数组大小为2?我该怎么做才能得到一个字符串或一个包含1个字符串的数组?提前感谢。

索引=0
是完整匹配,而
索引=1
是第一个捕获的组。如果您不希望捕获组,则只需使用:

/(?<=xxx-).*(?=-xxx)/

/(?
index=0
是完整匹配,而
index=1
(及以上)是第一个捕获的组。如果您不想要捕获的组,则只需使用:

/(?<=xxx-).*(?=-xxx)/
/(?来自:

如果提供了
$matches
,则它将填充搜索结果。
$matches[0]
将包含与完整模式匹配的文本,
$matches[1]
将包含与第一次捕获的文本匹配的文本 括号中的子模式,依此类推

换句话说,
匹配[0]
返回完全匹配,数组中的其他键只返回部分匹配(等于正则表达式中使用的
()
的数目)

请记住,preg_match将只匹配一个完整的结果;如果要返回给定字符串中的所有匹配项,请查看。

来自:

如果提供了
$matches
,则它将填充搜索结果。
$matches[0]
将包含与完整模式匹配的文本,
$matches[1]
将包含与第一次捕获的文本匹配的文本 括号中的子模式,依此类推

换句话说,
匹配[0]
返回完全匹配,数组中的其他键只返回部分匹配(等于正则表达式中使用的
()
的数目)

请记住,preg_match将只匹配一个完整的结果;如果要返回给定字符串中的所有匹配项,请查看

preg_match('/(?<=xxx-).*(?=-xxx)/', $string, $extract);
print_r($extract);