この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パーサーを使用することをお勧めします。