参考

编写构建工具

re-builder

  • 控制语法变量

    • reb-re-syntax
  • 相关命令

    • reb-change-syntax
    • reb-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 的字符
    • 参考:

    • 举例:

      • 中文字符: \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 格式声明正则

参考:

1
2
3
4
5
6
7
(rx "/*"                          ; Initial /*
    (zero-or-more
     (or (not (any "*"))          ;  Either non-*,
         (seq "*"                 ;  or * followed by
              (not (any "/")))))  ;  non-/
    (one-or-more "*")             ; At least one star,
    "/")                          ; and the final /

regex 可视化工具

visual-regexp

作用: emacs 原生 regexp 可视化搜索和替换工具

  • commands

    • vr/replace
    • vr/query-replace

visual-regexp-steroids

  • 自定义引擎变量

    • vr/engine

      • 备选值

        • python
        • pcre2el
        • emacs
        • custom 自定义
      • 默认值

        • python
  • 命令

    • 搜索

      • vr/isearch-forward
      • vr/isearch-backward
      • 注意:

        • pyim-isearch-mode 不支持正则搜索,需要关闭 pyim-isearch-mode
        • 才可以正常使用 vr/isearch-forword~ 和 isearch-forward
    • 替换

      • 每次手动选择 regexp 引擎

        • vr/select-replace
        • vr/select-replace-query
      • 改写 visual-regexp 中的函数(也使用 vr/engine 设置的引擎,而不是使用 emacs 风格)

        • vr/replace
        • vr/query-replace