有人可以解释这个elisp regexp

cod*_*one 3 regex emacs elisp

有些人可以解释下面的regexp,我在ediff-trees.el中找到它作为从比较过程中排除哪些文件/目录的规范.

"\\`\\(\\.?#.*\\|.*,v\\|.*~\\|\\.svn\\|CVS\\|_darcs\\)\\'"
Run Code Online (Sandbox Code Playgroud)

虽然我对正则表达式有些熟悉,但遇到这个基于字符串的elisp变种已经让我失望了.

rbp*_*rbp 6

首先,请记住elisp的正则表达式必须进行字符串转义,这会产生许多额外的反斜杠.删除它们,我们得到

\`\(\.?#.*\|.*,v\|.*~\|\.svn\|CVS\|_darcs\)\'
Run Code Online (Sandbox Code Playgroud)

然后,\(和\)表示分组,"foo\| bar"表示"foo或bar".

因此,这个正则表达式匹配:emacs临时文件(以#开头,可能以句点开头:.?#.)或RCS文件(以v:.,v 结尾),或者emacs备份文件(以〜:.*〜结尾),或svn目录(.svn),cvs目录(CVS)或darcs目录(_darcs).

编辑纠正:正如andre-r正确指出的那样,反引号"和单引号"基本上是指"字符串的开头和结尾"(分别).所以这意味着正则表达式找到的字符串恰好与我上面列出的一个选项相匹配(即字符串开始,然后是其中一个选择,然后字符串结束).我之前说他们的意思是引用,我不知道我在想什么:).谢谢andre-r!