搜索 (LaTeX) regex found NOT in another regex (math mode)
Search for (LaTeX) regex found NOT within another regex (math mode)
我试图在 LaTeX 中找到所有不在数学模式内的不正确编写的命令。也就是说,在下面,我想匹配“\bad”而不是“\good\”或“\math”。
Example of \bad command. Example of \good\ command. And $x=\math + y$ is also a good command.
我想出了如何匹配数学模式,它以非转义美元符号“$”开始和结束——我基本上想以某种方式反转这个匹配:
(?<!\)$.+?[^\]$
我想出了如何匹配“\bad”而不是“\good\”(注意 + 后面的 space):
\[A-Za-z]+
但我不知道如何将两者结合起来。我已经尝试过(否定的)环顾四周,但似乎没有任何进展(并非每个段落都必须包含数学模式)。有 suggestions/hints 吗?提前致谢!
编辑:
- 我正在使用与 Perl 兼容的正则表达式(确切地说是 Sublime Text 3)。
- "bad" 命令是一个不在数学模式中的宏,后跟 space。 "good" 命令是一个宏,后跟任何其他内容(标点符号或反斜杠)或数学模式中的任何宏。
Sublime Text 使用 Boost 库来处理正则表达式,因此它不完全兼容 Perl。
真正的 Perl 兼容答案是:
$.*?$(*SKIP)(*FAIL)|\\w+(?=\s)
但不幸的是,您不能在 Boost 中使用 (*SKIP)(*FAIL)
技巧(直到 this feature request 实现)。
你可以像这样解决这个问题:
$.*?$\K|\\w+(?(?=\s)|\K)
这种方法的问题是 "bad" 命令和数学模式结束标记将 仍然 产生一个空的(零-length) 匹配(感谢 \K
)。不知道对你来说够不够好
我试图在 LaTeX 中找到所有不在数学模式内的不正确编写的命令。也就是说,在下面,我想匹配“\bad”而不是“\good\”或“\math”。
Example of \bad command. Example of \good\ command. And $x=\math + y$ is also a good command.
我想出了如何匹配数学模式,它以非转义美元符号“$”开始和结束——我基本上想以某种方式反转这个匹配:
(?<!\)$.+?[^\]$
我想出了如何匹配“\bad”而不是“\good\”(注意 + 后面的 space):
\[A-Za-z]+
但我不知道如何将两者结合起来。我已经尝试过(否定的)环顾四周,但似乎没有任何进展(并非每个段落都必须包含数学模式)。有 suggestions/hints 吗?提前致谢!
编辑:
- 我正在使用与 Perl 兼容的正则表达式(确切地说是 Sublime Text 3)。
- "bad" 命令是一个不在数学模式中的宏,后跟 space。 "good" 命令是一个宏,后跟任何其他内容(标点符号或反斜杠)或数学模式中的任何宏。
Sublime Text 使用 Boost 库来处理正则表达式,因此它不完全兼容 Perl。
真正的 Perl 兼容答案是:
$.*?$(*SKIP)(*FAIL)|\\w+(?=\s)
但不幸的是,您不能在 Boost 中使用 (*SKIP)(*FAIL)
技巧(直到 this feature request 实现)。
你可以像这样解决这个问题:
$.*?$\K|\\w+(?(?=\s)|\K)
这种方法的问题是 "bad" 命令和数学模式结束标记将 仍然 产生一个空的(零-length) 匹配(感谢 \K
)。不知道对你来说够不够好