Regex 主要模式的lisp emacs正则表达式语法

Regex 主要模式的lisp emacs正则表达式语法,regex,emacs,syntax,elisp,major-mode,Regex,Emacs,Syntax,Elisp,Major Mode,我正在努力学习如何编写emacs主模式。网上有很多很棒的教程(例如),但我正在努力学习正则表达式匹配的语法。例如,我试图理解为什么 ”((“\”\(\(?:.\ \ \ \n\)*?[^\\]\)\” 从 匹配双引号之间的任何内容。此材质: 这似乎无法解释 还有更好的资源吗?回答您关于regexp做什么的问题--- 您引用的示例中的regexp实际上是“\”\(\\(?:.\\\\\\\n\)*?[^\\]\\)\” 要匹配的部分包括: \”,它只匹配一个“字符---它位于regexp的开头和

我正在努力学习如何编写emacs主模式。网上有很多很棒的教程(例如),但我正在努力学习正则表达式匹配的语法。例如,我试图理解为什么

”((“\”\(\(?:.\ \ \ \n\)*?[^\\]\)\”

匹配双引号之间的任何内容。此材质: 这似乎无法解释


还有更好的资源吗?

回答您关于regexp做什么的问题--- 您引用的示例中的regexp实际上是
“\”\(\\(?:.\\\\\\\n\)*?[^\\]\\)\”

要匹配的部分包括:

  • \”
    ,它只匹配一个
    字符---它位于regexp的开头和结尾

  • 一个组,包含
    \\(?:.\\\\n\\)*?
    ,后跟
    [^\\]
    。该组可能在那里,以便
    字体锁定关键字
    可以被告知对匹配的那部分进行处理,即匹配的
    开头和结尾之间的部分

  • \\(?:.\\\\n\\)*?
    ,组的第一部分,匹配零个或多个字符---任何字符。
    *?
    可以是
    *
    (相同的事情)。该
    匹配除换行符以外的任何字符,
    \n
    匹配换行符。
    \\\\\\124;
    表示这两个字符都可以

  • [^\\]
    匹配除反斜杠(
    \
    )之外的任何字符

因此,组合起来,组匹配零个或多个字符,后跟一个不是反斜杠的字符。为什么不使用在
字符之间匹配零个或多个字符的regexp呢?大概是因为用户希望确保结尾
没有被转义(通过反斜杠)但是,请注意,regexp要求
字符之间至少有一个字符,因此regexp与空字符串
不匹配


一个好的资源是:。

谢谢@Drew,这非常有帮助!但是你包含的资源链接让我感到困惑。它没有解释
\\
工作的原因,也没有解释
。关于regexps的最佳参考文档,它解释了
\\
,是Elisp手册。从node
开始xpressions
。这两种表达式都在node
Regexp Backslash
中进行了解释。有关Lisp字符串中反斜杠的使用,请参见node
Syntax for Strings
。请记住,Info中的
i
是查找内容的朋友,而
g
在显示节点“Regexp Special”时会直接将您带到给定的node,这显然涵盖了一些特殊情况,您应该能够向上查看“Regexps的语法”,而不是向试图提供帮助的人投反对票。
(define-derived-mode rich-text-mode text-mode "Rich Text"
  "text mode with string highlighting."

  ;;register keywords
  (setq rich-text-font-lock-keywords
        '(("\"\\(\\(?:.\\|\n\\)*?[^\\]\\)\"" 0 font-lock-string-face)))
  (setq font-lock-defaults rich-text-font-lock-keywords)
  (font-lock-mode 1))