PHP:试图理解子模式正则表达式匹配

时间:2014-01-09 16:57:37

标签: 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个元素。阅读我的php书(引用书籍引用)我假设数组中的第0个元素是整个字符串的匹配,而第二个元素只是子字符串的匹配。它是否正确?只是想确保我明白这一点。

“数组的第0个元素被设置为匹配的整个字符串 第一个元素是与第一个子模式匹配的子字符串(如果有的话), 第二个元素是与第二个子模式匹配的子字符串,依此类推。“

2 个答案:

答案 0 :(得分:0)

摘自preg_match()文档:

  

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

然后,使用/(dog)/正则表达式,您将拥有:

  • $matches[0]包含/(dog)/结果(完整模式)
  • $matches[1]包含(dog)个结果(第一个捕获组)

如果您的第一个捕获组与您的完整模式相同,那么match[0] = match[1]

答案 1 :(得分:0)

正确....

  • [0] =匹配完整模式 - 即狗
  • [1] =首先捕获 - 即狗

由于您的整个模式也被捕获(()),因此两者都是相同的。

如果您使用正则表达式/cat (dog)/,结果将是

  • [0] =匹配的完整模式 - 即猫狗
  • [1] =首先捕获 - 即狗