首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主要模式的lisp emacs regex语法

主要模式的lisp emacs regex语法
EN

Stack Overflow用户
提问于 2013-08-31 15:06:30
回答 1查看 250关注 0票数 1

我在试着学习怎么写emacs的主要模式。网上有很多很棒的教程(例如http://www.emacswiki.org/emacs/GenericMode),但我很难学习正则表达式匹配的语法。例如,from this answer --我想弄明白为什么

'(("\"\\(\\(?:.\\|\n\\)*?[^\\]\\)\""

从…

代码语言:javascript
复制
(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))

匹配双引号之间的任何内容。这个材料:node/elisp/Regexp-Special.html#Regexp-Special似乎不能解释这一点。

有什么更好的资源吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-31 17:08:37

对于你关于regexp做什么的问题的一个答案--你所举的例子中的regexp实际上是"\"\\(\\(?:.\\|\n\\)*?[^\\]\\)\""

要匹配的部件如下:

  • \",它只匹配一个"字符--这是regexp的开头和结尾。
  • 一个组,它包含\\(?:.\\|\n\\)*?,后面跟着[^\\]。这个组大概是为了让font-lock-keywords对匹配的那个部分做一些事情,也就是在开始和结束时匹配的"之间的部分。
  • \\(?:.\\|\n\\)*?,这个组的第一部分,匹配零或多个字符--任何字符。*?可能只是* (同样的事情)。.匹配除换行符以外的任何字符,\n匹配换行符。\\|意味着其中任何一个都是可以的。
  • [^\\]匹配除反斜杠(\)以外的任何字符。

因此,把它放在一起,组匹配零或多个字符,后面是一个字符,而不是反斜杠。为什么不使用与"字符之间的零或多个字符匹配的regexp呢?大概是因为这个人想确保结束的"没有被转义(用一个反斜杠)。但是,请注意,regexp要求在"字符之间至少有一个字符,以便regexp与空字符串""不匹配。

一个好的资源是:http://www.emacswiki.org/emacs/RegularExpression

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18549517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档