Emacs:replace-regexp替换不更改大小写

时间:2014-08-09 23:38:39

标签: regex emacs

我最近试图将导出的Common Lisp符号从字符串转换为关键字。我基本上希望"HELLO"成为:hello。我尝试使用Emacs replace-regexp命令。以下是我给出的两个表达方式:

"\([^ ]*\)"
:\,(downcase \1)

我测试了第一个,检查是否能找到我希望它替换的所有情况,并且确实如此。但是,当我使用替换时,它工作除了符号不是小写的("HELLO"变为:HELLO)。然后我尝试将第一个表达式更改为一个案例一个案例。有点像:

"\([-A-Z+*/\<>=&]*\)"

奇怪的是,当我使用相同的第二个表达式与这个新的第一个表达式时,它完美地工作。这是一个错误,还是我实际上做错了什么?

1 个答案:

答案 0 :(得分:1)

这是replace-regexp的记录行为,请参阅其文档字符串:

Preserve case in each match if `case-replace' and `case-fold-search' are non-nil and REGEXP has no uppercase letters.

因此,为避免案例保留,您可以在匹配的正则表达式中包含大写字母,或者 Mx set-variable RET case-replace RET nil 。 (您也可以设置case-fold-search,但这会影响很多搜索功能,而case-replace只影响替换功能。)

请参阅https://stackoverflow.com/a/13706627/319698了解非交互式版本。