迹忆客 计算机编程题库

子组和捕获

正则表达式`(ab)\1+`可以匹配下面哪些字符串
  • abab
  • ababab
  • abaabaa
  • abbabab
正确答案是:A,B
正确率:81%

解析:

小括号除了将正则表达式的一部分分组在一起之外,它还创建了一个编号捕获组。它将字符串的一部分与正则表达式的一部分匹配,存储在括号内。正则表达式(ab)\1+中,\1是对(ab)分组的一个引用。(ab)匹配成功之后,会将ab捕获存储在括号中,并且对这个捕获进行编号,从1开始。因为该正则表达式中只有一个捕获组,所以\1就是对ab的引用,因此上面的正则表达式的结果其实相当于(ab)(ab)+。不同的是后者有多个捕获组。我们通过PHP代码来运行一下上面的正则匹配。

$str = 'ababab';
$pattern = '/([ab])\1+/';
$res = preg_match($pattern,$str,$matches);
print_r($matches);

查看笔记

扫码一下
查看教程更方便