正则表达式:在正则表达式定义的区域内多次匹配 (emacs)

Regex: match multiple times within regex defined region (emacs)

我正在为我使用的 markdown + latex 组合进行语法高亮显示。文档的主要模式是降价,我坚持的一点是在乳胶块内突出显示乳胶的特殊字符。

如果我们以 latex 环境为例:

\begin{align*}
    f(x) &= x^2
    g(x) &= x^3
\end{align*}

我可以匹配简单的环境(没有emacs的转义)^\begin{.*}(.|\n)*?\end{.*}$

(我知道这不适用于环境中的环境,我知道必须使 {.*} 部分的开头和结尾相同 - 我很乐意就最佳方式提出建议也这样做)编辑:修复它,只需要捕获开始标签然后在结束标签中使用它。

我有兴趣在环境中(但不在环境外)突出显示 latex 的特殊字符:这些字符是 $#^_{}&。如果有人能指出我修改环境检测器的方向,使一个或多个组包含这些字符,我将不胜感激。 (我不确定这是否完全可能)。

干杯!

使用 anchored font-lock 关键字,将匹配锚定在环境中的某个点。请参阅 Elisp 手册,节点 Search-based Fontification。请参阅 (MATCHER . ANCHORED-HIGHLIGHTER)(MATCHER HIGHLIGHTERS...) 的说明。

(但请注意,一般来说,正则表达式不够强大,无法进行您想在此处进行的那种匹配。根据您对嵌套等的评论,我猜您已经知道这一点)