You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Emacs中添加正则表达式更新版权年份:替换:y为当前年份

问题:Emacs中更新版权信息时匹配:y的正则表达式问题

场景描述

  • 需要将如下版权信息中的:y替换为当前年份:
    # Copyright (C) A Company, Inc. :y, all rights reserved.
    
  • 尝试修改copyright-regexp变量,直接在原有正则末尾添加|:y后,不仅无法匹配:y,还破坏了原有年份替换功能。
  • 当前从customize-variable获取的正则表达式为:
    \(©\|@copyright{}\|[Cc]opyright\s *:?\s *\(?:(C)\)?\|[Cc]opyright\s *:?\s *©\)\s *\(?:[^0-9\n]*\s *\)?\([1-9]\([-0-9, ';/*%#\n\t]\|\s<\|\s>\)*[0-9]+\|:y\)
    

解决方案

正确的正则表达式

调整分组结构,确保:y作为合法的待替换项同时不干扰原有年份匹配逻辑:

\(©\|@copyright{}\|[Cc]opyright\s*:?\s*\(?:(C)\)?\|[Cc]opyright\s*:?\s*©\)\s*\(?:[^0-9\n]*\s*\)?\(\([1-9][-0-9, ';/*%#\n\t\s<\s>]*[0-9]+\)\|:y\)

可直接用于EL文件的转义字符串

Emacs Lisp中反斜杠需要双重转义,以下是可直接粘贴到.el文件的版本:

"(©\\|@copyright{}\\|[Cc]opyright\\s*:?\\s*\\(?:(C)\\)?\\|[Cc]opyright\\s*:?\\s*©\\)\\s*\\(?:[^0-9\\n]*\\s*\\)?\\(\\([1-9][-0-9, ';/*%#\\n\\t\\s<\\s>]*[0-9]+\\)\\|:y\\)"

关键调整说明

  • 重新梳理了捕获组层级,把原有的年份匹配部分单独包裹,让:y作为并列选项时,整个捕获组能正确识别需要替换的目标内容(年份序列或:y)。
  • 简化了原正则中的\s&lt;\|\s&gt;为\s<\s>,保持匹配效果的同时提升可读性。

内容的提问来源于stack exchange,提问作者Mark Field

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:12:49