为啥我的带有 ^ 的 Emacs 正则表达式不能匹配行的开头?

Posted

技术标签:

【中文标题】为啥我的带有 ^ 的 Emacs 正则表达式不能匹配行的开头?【英文标题】:Why doesn't my Emacs regular expression with ^ to match the start of a line work?为什么我的带有 ^ 的 Emacs 正则表达式不能匹配行的开头? 【发布时间】:2010-11-10 05:05:07 【问题描述】:

我正在尝试设置.emacs,以便任何以字母makefile 开头的文件都将其设置为makefile 模式。例如。 makefile-something 应该处于 makefile 模式。

这不起作用:

(setq auto-mode-alist (cons '("^makefile" . makefile-mode) auto-mode-alist))

但这确实:

(setq auto-mode-alist (cons '("makefile" . makefile-mode) auto-mode-alist))

谁能解释一下原因?

【问题讨论】:

【参考方案1】:

是因为文件名前面有路径组件,试试:

"/makefile[^/]*$"

见http://www.gnu.org/s/emacs/manual/html_node/elisp/Auto-Major-Mode.html(页面底部)

EDI:根据 Sean 评论更正正则表达式

【讨论】:

该正则表达式还将匹配 /foo/makefiles/bar 之类的内容。我想你想要“/makefile[^/]*$”。 幸运的是我没有 /foo/makefiles/bar 之类的东西,但感谢 Sean 的更正。【参考方案2】:

所以这只是一个有根据的猜测,但我注意到auto-mode-alist 中想要匹配文件名开头的其他正则表达式不使用^,他们使用/。例如:

("/\\.?\\(?:gnokiirc\\|kde.*rc\\|mime\\.types\\|wgetrc\\)\\'" . conf-mode)

(来自 Emacs 23.2.1)基于此,我认为正则表达式可能应用于文件的 完整路径名,而不是基本名称。所以试试

(setq auto-mode-alist (cons '("/makefile" . makefile-mode) auto-mode-alist))

改为。

【讨论】:

【参考方案3】:

为了方便,试试

 (add-to-list 'auto-mode-alist ...

【讨论】:

感谢您的提示。我的emacs知识很差。

以上是关于为啥我的带有 ^ 的 Emacs 正则表达式不能匹配行的开头?的主要内容,如果未能解决你的问题,请参考以下文章

Python正则表达式,多行匹配模式..为啥这不起作用?

为啥这个正则表达式模式不能按预期工作?

为啥我不能使用 warnings.filterwarnings 使用正则表达式来抑制警告

正则-简单的模式

亚马逊短网址正则表达式...为啥我不能让它工作

为啥我不能使用正则表达式来评估 if...else 语句 [重复]