Git 如何修复:致命:无效的反向引用

Git 如何修复:致命:无效的反向引用,git,grep,Git,Grep,我试图在git repo中找到三个重复字符,而不是句号或破折号。有人能解释为什么这不起作用吗: $ git grep -n "([^.-])\1{2}" fatal: command line, '([^.-])\1{2}': Invalid back reference 为什么\1不是第一个捕获组的有效反向引用?要创建捕获组,需要将括号反斜杠。您还需要将花括号反斜杠,使其成为量词: git grep -n "\([^.-]\)\1\{2\}" 或者,使用扩展的或与Perl兼容的正则表达式,

我试图在git repo中找到三个重复字符,而不是句号或破折号。有人能解释为什么这不起作用吗:

$ git grep -n "([^.-])\1{2}"
fatal: command line, '([^.-])\1{2}': Invalid back reference

为什么
\1
不是第一个捕获组的有效反向引用?

要创建捕获组,需要将括号反斜杠。您还需要将花括号反斜杠,使其成为量词:

git grep -n "\([^.-]\)\1\{2\}"
或者,使用扩展的或与Perl兼容的正则表达式,分别使用文字括号和花括号进行捕获和量化:

git grep -nE "([^.-])\1{2}"
git grep -nP "([^.-])\1{2}"
git之所以说“无效的反向引用”,是因为
\1
匹配POSIX反向引用语法,但纯
与预期语法不匹配。POSIX基本正则表达式或BRE语法将纯
视为逐字文本,并且仅将
\(
\)
视为捕获组分隔符。有关详细信息,请参阅。