Regex to match LaTeX equations

前端 未结 1 1378
情话喂你
情话喂你 2021-02-04 13:50

I am trying to configure the TeXWorks editor to use the same syntax coloring as TeXMaker. However, TexWorks uses regexes to specify what should be coloured. Unfortunately it doe

相关标签:
1条回答
  • 2021-02-04 14:37

    Try this PCRE regex:

    (?<!\\)    # 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\}
      )
    ))))
    

    See this regex in action: https://regex101.com/r/wP2aV6/25

    Since this regex uses recursion it will handle nested mathematical expressions correctly.

    This works only on PCRE compatible regex engines. It requires some advanced features of regex engines, like negative lookbehind, conditional expressions and recursion which are not present in all regex engines.

    Unless you need something really simple then I would advise against using this regex and instead using a proper LaTeX parser.

    0 讨论(0)
提交回复
热议问题