【问题标题】:What is the OR operator in emacs regexps?emacs 正则表达式中的 OR 运算符是什么?
【发布时间】:2011-05-25 11:49:52
【问题描述】:

手册说使用'\|',因为a\|b 匹配a 或b。但是当我将它与 regexp builder 或 align-regexp 一起使用时,例如带有“True\|False”,它不能识别“True”或“False”。我收到以下消息:

Wrong argument type: integer-or-marker-p, nil

我做错了什么?

【问题讨论】:

  • 你确定你应该使用\|而不是|吗?
  • 发生了一些奇怪的事情,因为如果你尝试 True\|False 与 highlight-regexp 它可以工作。在 regexp-builder 中它没有。也许在看起来很蹩脚的构建器中组和或不工作。
  • 我不认为正则表达式是你的问题。发布 emacs lisp。
  • 我发现与 @justinhj 的 emacs-version 21.3.1 (x86_64-redhat-linux-gnu) 相同
  • 发布您遇到问题的确切命令序列,或复制粘贴您尝试使用的 Lisp 代码(我什至不知道是哪个!)。 “或”运算符是\|。字符串和正则表达式在 Emacs Lisp 中是正交的,所以如果你把一个正则表达式放在一个字符串中,你需要写例如"True\\|False".

标签: regex emacs


【解决方案1】:

使用双重转义:\\|

一些补充说明:

Emacs 有 2 种转义样式,一种在 EmacsLisp 中,另一种在命令中使用,
IE。从M-x 提示符(rgrepoccur,...)

在 EmacsLisp 中,使用双反斜杠 \\|

M-x … 使用单个反斜杠\|

... 作为旁注,在编写嵌入式 EmacsLisp 时,例如在 yasn-p 动态扩展中,您必须使用四重反斜杠:\\\\|(以转义双反斜杠。)

始终避免这种情况(如果可能),例如在 yasn-p 中,您可以通过 .yas-setup.el 提供与模式相关的 emacslisp,而无需额外转义

【讨论】:

    【解决方案2】:

    更多详细信息,请参阅elisp手册第34.3.1.1节“正则表达式中的特殊字符”中对'\'和字符串的讨论

    M-: (info "(elisp) Regexp Special") RET

    【讨论】:

    • 什么是绑定M-:
    • 如果您的意思是“如何输入?”它是 Meta 修饰符和冒号键。在我的键盘上,Meta 是我的“Alt”键,冒号是移位的分号键,所以我也必须按住 Shift。如果您的意思是“它绑定到什么命令?”然后问 Emacs -- 输入 C-h k M-:
    • 您也可以键入C-h i g (elisp)Regexp Special 直接跳转到手册中的某个节点,例如那个。
    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 2011-01-03
    • 1970-01-01
    • 2013-11-18
    • 2023-03-10
    • 2014-08-24
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多