当前位置:  开发笔记 > 编程语言 > 正文

Emacs - Lisp中的正则表达式需要双重转义 - 为什么?

如何解决《Emacs-Lisp中的正则表达式需要双重转义-为什么?》经验,为你挑选了4个好方法。

我一直在玩emacs lisp,我想编写一个小函数来进行正则表达式搜索和替换.我有一段时间让正则表达式正常工作,因为我没有意识到在编写lisp代码时需要对所有特殊字符进行双重转义(但在交互式使用query-replace-regexp时则不行!).

因此,例如,交互式使用query-replace-regexp即可使用

^\(.*\)[\t]-.*$

但是在编写elisp代码时,你需要双重转义所有内容:

^\\(.*\\)[\t]-.*$  

我终于在Steve Yegge的文章中找到了对此的引用,但我想知道是否有人知道这是为什么?



1> scottfrazer..:

这是因为你需要在字符串中转义反斜杠.如果你没有逃避\(字符串中的反斜杠,那么结果就是这样(


对于没有对正则表达式直接语法支持并通过字符串文字(例如,Java,Javascript)构造它们的任何语言都是如此,对吧?

2> Trey Jackson..:

您已经有了答案,但是在Emacs中创建正则表达式的内置助手是重新构建的.

M-x re-builder



3> Kyle Cronin..:

scottfrazier是正确的,在读取字符串时解析一个转义符,在创建正则表达式时解析另一个转义符.这很容易记住,但它可能会变得很痛苦,特别是当你试图匹配文字反斜杠'\'时.您最终必须执行四次'\\\\',因为您必须使用双斜杠来匹配初始字符串解析和正则表达式解析中的斜杠.

当你在Stack Overflow上写这个问题时,你必须使用8个斜杠,因为markdown也使用斜杠作为转义字符.



4> jrockway..:

FWIW,emacs-lisp-mode会为特殊的表达形式(就像 你\\(\\)你一样).然后你可以将面部变成一个突出的东西.

(他们是font-lock-regexp-grouping-constructfont-lock-regexp-grouping-backslash)

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有