Regexp ---- Emacs 中的正则表达式
文章目录
参考
与其他语言对比
简化的 emacs style regexp 介绍
编写构建工具
re-builder
控制语法变量
reb-re-syntax
相关命令
reb-change-syntaxreb-change-target-buffer
emacs regex 原生正则
字符集
[:type:] 表示法
参考:
用法:
[:digit:]: 整体是一个名称[[:digit:]]: 这样才是在正则里的用法eg:
[[:digit:]]+: 表示多个数字[[:upper:]\|[:digit:]\.]- 在一个[]内部使用
类型:
ascii
[:ascii:]: 0-127 所有的 ascii 字符[:noascii:]
单字节和多字节
[:multibyte:][:unibyte:]
数字和单词
[:digit:]: 数字[:alpha:]: word,a-z, A-Z[:alnum:]: word + number[:word:]: word, 包括连词符“-”, 类似 python \w, emacs \sw
不可见字符
[:blank:]: 水平空白符[:space:]: 所有空白符, 相当于 python \s, emacs \s-[:cntrl:]: 0-31
可见字符
[:graph:]: 除掉 空白符,控制符号,… 不可见字符
数字
[:digit:]: 十进制数,0-9 数字, 类似 python \d[:xdigit:]: 十六进制数,0-9, a-f, A-F
大小写
[:upper:][:lower:]
标点符号
[:punct:]
排版
[:print:]
转义运算符表示法
\sCODE
- 作用:\s 和 CODE 一起指定字符集,用来表示 syntax class table 中的字符集 参考: elisp#Syntax Class Table
- \s 表示 Syntax
CODE 是那类字符集
-或者 = =: 空白符w: word, [-a-zA-Z], 类似 python 中的 \w(和): 开括号“(”和闭括号“)”.: 标点符号_: symbol": string 字符串\: 转义字符/
eg:
\s-或 ~\s ~ : 空白符\sw: word 字符
§CODE
- 作用: 相当于 \sCODE 字符集取反
\cC
- 作用: 匹配指定类别 category 的字符
参考:
M-x describe-categories- elisp#Categories
举例:
- 中文字符:
\cc, c –> Chinese - 希腊字符:
\cg, g –> Greek - ASCII:
\ca
- 中文字符:
注意:
- 一个字符可能属于多个类别 category
\CC
- 作用: \cC 取反
特殊位置
不在匹配位置
\`: buffer begin, buffer 开头\': buffer end, buffer 结尾\=: match point\b: 词边界\B: 非词边界,但是,不包括 buffer 开头和结尾\<: word beginning, 词开头\>: word end, 词结尾\_<: symbol 开头\_>: symbol 结尾
相关函数
参考:
函数:
regexp-quote
- 作用: 把给定文本中的 regexp 相关特殊字符自动转义
regexp-opt
- 作用: 把一个字符串列表转换成一个正则
eg:
1 2 3 4 5(regexp-opt '("hello" "there") 'symbols) ⇨ "\\_<\\(hello\\|there\\)\\_>" (regexp-opt '("hello" "there") 'words) ⇨ "\\<\\(hello\\|there\\)\\>"
rx 格式声明正则
参考:
| |
regex 可视化工具
三方
- GitHub - benma/visual-regexp.el: A regexp/replace command for Emacs with inte…
GitHub - benma/visual-regexp-steroids.el: Extends visual-regexp to support ot…
- 支持自定义后台 regex 引擎,使用 python regex 或 PCRE(perl regex)
visual-regexp
作用: emacs 原生 regexp 可视化搜索和替换工具
commands
vr/replacevr/query-replace
visual-regexp-steroids
自定义引擎变量
vr/engine备选值
- python
- pcre2el
- emacs
- custom 自定义
默认值
- python
命令
搜索
vr/isearch-forwardvr/isearch-backward注意:
- pyim-isearch-mode 不支持正则搜索,需要关闭
pyim-isearch-mode - 才可以正常使用 vr/isearch-forword~ 和
isearch-forward
- pyim-isearch-mode 不支持正则搜索,需要关闭
替换
每次手动选择 regexp 引擎
vr/select-replacevr/select-replace-query
改写 visual-regexp 中的函数(也使用 vr/engine 设置的引擎,而不是使用 emacs 风格)
vr/replacevr/query-replace
文章作者
上次更新 2023-02-22 (ab931a2)