如何修复Emacs的语法高亮qr“\。[^。] + $”?

时间:2011-11-27 00:09:12

标签: regex perl emacs syntax-highlighting

Emacs在

之类的行之后会混淆语法
fileparse($file, qr"\.[^.]+$");

并认为文件的其余部分是一个字符串。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

Emacs对qr表达式中的引号感到困惑。标准正则表达式分隔符(/)有效:

fileparse($file, qr/\.[^.]+$/);

事实上,几乎所有其他事情似乎都有效。

fileparse($file, qr{(\.[^.]+$/});
fileparse($file, qr*\.[^.]+$*);
fileparse($file, qr#\.[^.]+$#);

我的VIM版本不会被引号混淆,但我知道VIM的旧版本确实如此。引用引号确实令人困惑,因为它使qr表达式看起来像一个字符串(它不是)。在正则表达式中使用引号作为分隔符通常是不好的策略,即使它在技术上是合法的。

然而,真正重要的问题是什么是fileparse?这不是标准的Perl功能。我假设这是从File::Basename导入的?这是对的吗?

根据我的文档,fileparse中的第二个参数假设是一个数组而不是引用的正则表达式。

答案 1 :(得分:3)

David W.可能有正确的答案。同样,最好避免使用"作为分隔符,但有时您需要使用'作为分隔符来防止插值,因此在这种情况下,这可能对某些人有用。

所以,如果由于某种原因你真的想要引用分隔符(或者为了防止使用'进行插值),你总是可以这样做:

fileparse($file, qr"\.[^.]+$"); #"# highlight fix

使用SO表现糟糕的一个例子:

s'hi'by'; #'# highlight fix

注意:第二个#是在编辑器中触发注释突出显示,以便highlight fix显示为评论。