我正在努力了解子模式的工作原理,我对某些事情感到有些困惑:
$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个元素。阅读我的php书(引用书籍引用)我假设数组中的第0个元素是整个字符串的匹配,而第二个元素只是子字符串的匹配。它是否正确?只是想确保我明白这一点。
“数组的第0个元素被设置为匹配的整个字符串 第一个元素是与第一个子模式匹配的子字符串(如果有的话), 第二个元素是与第二个子模式匹配的子字符串,依此类推。“
答案 0 :(得分:0)
摘自preg_match()
文档:
如果提供了匹配,那么它将填充搜索结果
$matches[0]
将包含与完整模式匹配的文本,
$matches[1]
将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。
然后,使用/(dog)/
正则表达式,您将拥有:
$matches[0]
包含/(dog)/
结果(完整模式)$matches[1]
包含(dog)
个结果(第一个捕获组)如果您的第一个捕获组与您的完整模式相同,那么match[0] = match[1]
。
答案 1 :(得分:0)
正确....
由于您的整个模式也被捕获(()
),因此两者都是相同的。
如果您使用正则表达式/cat (dog)/
,结果将是