PHP:试图理解子模式正则表达式匹配
我试图理解子模式是如何工作的,我对一些事情有点困惑:PHP:试图理解子模式正则表达式匹配,php,regex,Php,Regex,我试图理解子模式是如何工作的,我对一些事情有点困惑: $var2 = 'cat dog cow moose bat'; $match = preg_match( "/(dog)/", $var2, $arr ); var_dump($arr); array(2) { [0]=> string(3) "dog" [1]=> string(3) "dog" } 我不知道为什么数组中有2个元素。在阅读BookBlow中的php书籍引用时,我假设数组中的第0个元素
$var2 = 'cat dog cow moose bat';
$match = preg_match(
"/(dog)/",
$var2,
$arr
);
var_dump($arr);
array(2) { [0]=> string(3) "dog" [1]=> string(3) "dog" }
我不知道为什么数组中有2个元素。在阅读BookBlow中的php书籍引用时,我假设数组中的第0个元素与整个字符串匹配,而第二个元素仅与子字符串匹配。这是正确的吗?只是想确保我明白这一点
数组的第0个元素设置为匹配的整个字符串。这个
第一个元素是与第一个子模式匹配的子字符串(如果有),则
第二个元素是与第二个子模式匹配的子字符串,依此类推。摘自文档:
如果提供了匹配项,则它将填充搜索结果。
$matches[0]将包含与完整模式匹配的文本,
$matches[1]将包含与第一个捕获的子模式匹配的文本,以此类推
然后,使用/dog/regex,您将拥有:
$matches[0]包含/dog/results完整模式
$matches[1]包含首次捕获组的狗的结果
如果您的第一个捕获组等于您的完整模式,则匹配[0]=匹配[1]。正确
[0]=匹配的完整模式-即狗
[1] 第一只被抓获的狗
因为你的整个模式也被捕获了,所以两者都是相同的
如果使用regex/cat-dog/结果将是
[0]=匹配的完整模式-即猫狗
[1] 第一只被抓获的狗
是的,您是正确的,在您的情况下,您只有1个元素,因此match[0]=match[1]