迹忆客 计算机编程题库

反向引用

正则表达式`(q?)b\1`不能和下面哪个字符串匹配
  • b
  • qb
  • qbq
  • bq
正确答案是:D
正确率:33%

解析:

正则表达式(q?)b\1中的 q?是可选的。首先对于A选项来说。q匹配失败,但是由于q?可选,所以捕获组是成功的,但是不匹配任何内容。标记 b 匹配字符b。\1成功匹配捕获组所捕获的内容(这里是空)。因此是可以匹配字符串b的。对于B选项,正则(q?)可以匹配p,并且捕获p。标记b匹配字符b。\1此时是前面捕获的p,但是后面没有匹配项,因此匹配失败。但是因为正则引擎知道前面?是具有贪婪性的,所以在\1匹配失败后,正则引擎会回溯。因此此时(q?) 不再匹配q。b和q不匹配,引擎在字符串中前进一个字符,b和b匹配。因为由于正则的回溯,(q?)此时捕获的为空,所以\1可以匹配。至此,可以匹配 qb字符串中的字符b。对于C选项这个就容易理解了。最后的D选项很明显是不能匹配的。

相关文章 反向引用

查看笔记

扫码一下
查看教程更方便