我有一堆来自SQL查询的列名,我希望在使用Emacs AS
之前删除所有内容。换句话说,我想从
MAX(CASE WHEN maintenance.work_order IS NULL THEN 1 ELSE 0 END) AS Has_work_order,
到
Has_work_order,
我使用re-builder
创建了一个简单的正则表达式:"\.\*AS "
,它突出显示了缓冲区的相应部分。但是,当我选择整个缓冲区并使用query-replace-regexp
运行M-x query-replace-regexp <RET> "\.\*AS " <RET> "" <RET>
时,Emacs会显示Replaced 0 occurrences
消息。
我做错了什么?
答案 0 :(得分:2)
通过使用re-builder
( 一个好主意)为交互式使用创建正则表达式,您会在不同的regexp语法选项之间感到困惑。 re-builder
默认为read
语法(在编写elisp代码时使用),而对于交互式使用,您需要string
语法。
在读取语法中,\.\*AS
表示正则表达式.*AS
(因为.
和*
在读取字符串时并不特殊,因此这些反斜杠是多余的);但是在字符串语法\.\*AS
中是正则表达式\.\*AS
,其中regexp特有的.
和*
字符已被转义,因此失去了它们的特殊含义,并且而是在文本中匹配文字.
和*
字符。
但请注意,在以交互方式输入正则表达式时,不应包含"
中存在的周围双引号字符re-builder
,即使其{{1}语法模式。如果您以交互方式输入string
个字符,则正则表达式将匹配包含"
个字符的文本。
答案 1 :(得分:1)
我能够通过以下方式实现这一目标:
M-x query-replace-regexp <RET> \(.+\)AS <RET> <RET>
请注意,光标必须位于需要替换的行上方。我之前没有使用过它,但它是互动的(按下&#39; y
&#39;对于每次更换,这可以自动/全局完成,但我&# 39;没有玩过它。