共281行

Emacs中正则表达式,里面的转义字符有哪些?

2026-04-08 18:17:54

Emacs 正则(Elisp 语法)里, \  是转义符:

一、需要转义的特殊字符(取消特殊含义)

这些字符本身是正则元字符,想匹配字面时要加  \ :

二、 \  开头的特殊元序列(有特殊含义)

  1. 空白/控制符
  1. 字符类
  1. 位置锚点(零宽)
  1. 分组与量词

三、字符集  [...]  内规则

四、Lisp 字符串双重转义(重点)

在 Elisp 代码字符串里, \  本身也要转义,所以:

常用 Emacs 正则示例

下面是Emacs 原生正则常用示例,直接在  isearch-forward-regexp (C-M-s)、 query-replace-regexp 、Elisp 里都能用。
统一说明:

 

一、基础匹配

regexp

abc 匹配 abc
^abc 行首 abc
abc$ 行尾 abc
^$ 空行
. 任意单个字符
.* 任意字符(贪婪)
.*? 任意字符(非贪婪,Emacs 支持)
 

 

二、字符类

regexp

[0-9] 数字
[a-zA-Z] 字母
[a-z0-9_] 小写字母+数字+下划线
[^0-9] 非数字
 

Emacs 专用简写:

regexp

[[:digit:]] 数字
[[:alpha:]] 字母
[[:alnum:]] 字母+数字
[[:space:]] 空白(空格/Tab/换行)
[[:blank:]] 空格+Tab
 

 

三、量词

regexp

a* a 0次或多次
a+ a 1次或多次
a? a 0或1次
a{3} a exactly 3 次
a{2,5} a 2~5次
a{3,} a 3次以上
 

 

四、分组与引用

regexp

<inline_LaTeX_Formula>abc<\inline_LaTeX_Formula> 分组
\1 引用第1组
<inline_LaTeX_Formula>ab<\inline_LaTeX_Formula>\1 匹配 abab
 

替换时常用:

 

五、或、词边界

regexp

abc|def abc 或 def
<foo> 完整单词 foo
\b 词边界(同 < >)
 

 

六、空白与换行

regexp

[ ]+ 一个或多个空格
[ \t]+ 空格或 Tab
\s- 空白(空格/Tab)
\n 换行
\r\n Windows 换行
 

删除行尾空格:

regexp

[ \t]+$
 

 

七、常用实用模板

  1. 匹配整数/小数

regexp

-?[0-9]+(.[0-9]+)?
 

  1. 匹配十六进制

regexp

0x[0-9a-fA-F]+
 

  1. 匹配邮箱(简单版)

regexp

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]+
 

  1. 匹配 URL(简单)

regexp

https?://[^ ]+
 

  1. 匹配单行注释(C/C++/Java)

regexp

//.*
 

  1. 匹配 /* ... */ 块注释(单行)

regexp

/*.**/
 

  1. 匹配引号字符串

regexp

"[^"]*"
 

  1. 匹配所有中文

regexp

[一-龥]
 

  1. 去掉多余空行(匹配连续空行)

regexp

^$
^[\n]+
 

  1. 匹配函数名(类 C 风格)

regexp

[a-zA-Z_][a-zA-Z0-9_]+(
 

 

八、Emacs 搜索替换常用套路

交换两个单词

查找: <inline_LaTeX_Formula>\w+<\inline_LaTeX_Formula> <inline_LaTeX_Formula>\w+<\inline_LaTeX_Formula> 
替换: \2 \1 

给数字加括号

查找: <inline_LaTeX_Formula>[0-9]+<\inline_LaTeX_Formula> 
替换: (\1) 

删除行首空格

查找: ^[ \t]+ 
替换:空