11

我正在尝试将 TeXWorks 编辑器配置为使用与 TeXMaker 相同的语法着色。然而,TexWorks 使用正则表达式来指定应该着色的内容。不幸的是,它没有数学的默认设置。

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

它也可以是多个正则表达式来匹配所有情况。

当然\$是逃脱了,所以我不想匹配它,也不想\\[等等。

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

“做不到”是一个可能的答案。

4

1 回答 1

11

试试这个 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 解析器。

于 2013-01-26T14:28:03.363 回答