匹配LaTeX方程的正则表达式



我试图配置TeXWorks编辑器使用与TeXMaker相同的语法着色。然而,TexWorks使用正则表达式来指定应该着色的内容。遗憾的是,它没有math的默认设置。

我想匹配$$之间的所有内容,在[]之间,()之间的一切,$$$$之间的所有内容。后者不是很必要,因为它很少在LaTeX文档中使用。

也可以有多个正则表达式来匹配所有的大小写。

当然$是转义的,所以我不想匹配它,\[也不想匹配。

然后我还想匹配begin{equation}end{equation}之间的所有内容,但这很简单。

"It cannot be done"是一个可能的答案。

试试这个PCRE正则表达式:

(?<!\)    # negative look-behind to make sure start is not escaped 
(?:        # start non-capture group for all possible match starts
  # group 1, match dollar signs only 
  # single or double dollar sign enforced by look-arounds
  ((?<!$)${1,2}(?!$))|
  # group 2, match escaped parenthesis
  (\()|
  # group 3, match escaped bracket
  (\[)|                 
  # group 4, match begin equation
  (\begin{equation})
)
# if group 1 was start
(?(1)
  # non greedy match everything in between
  # group 1 matches do not support recursion
  (.*?)(?<!\)
  # match ending double or single dollar signs
  (?<!$)1(?!$)|  
# else
(?:
  # greedily and recursively match everything in between
  # groups 2, 3 and 4 support recursion
  (.*(?R)?.*)(?<!\)
  (?:
    # if group 2 was start, escaped parenthesis is end
    (?(2)\)|  
    # if group 3 was start, escaped bracket is end
    (?(3)\]|     
    # else group 4 was start, match end equation
    \end{equation}
  )
))))

查看这个正则表达式的实际操作:https://regex101.com/r/wP2aV6/25

由于这个正则表达式使用递归,它将正确处理嵌套的数学表达式。

这只适用于PCRE兼容的正则表达式引擎。它需要正则表达式引擎的一些高级特性,比如负向后看、条件表达式和递归,这些在所有正则表达式引擎中都不存在。

除非你需要一些非常简单的东西,否则我建议不要使用这个正则表达式,而是使用一个合适的LaTeX解析器。

最新更新