搜索(LaTeX)正则表达式,而不是在另一个正则表达式(数学模式)中找到



我试图在 LaTeX 中找到所有不在数学模式下的编写不正确的命令。也就是说,在下文中,我想匹配"\bad"而不是"\good"或"\math"。

Example of bad command. Example of good command. And $x=math + y$ is also a good command.

我想出了如何匹配数学模式,它以非转义的美元符号"$"开头和结尾——我本质上想以某种方式反转这个匹配:

(?<!\)$.+?[^\]$

我想出了如何匹配"\bad"而不是"\good\"(注意+后面的空格):

\[A-Za-z]+ 

但是我不知道如何将两者结合起来。我尝试过(负面)环顾四周,似乎没有取得任何进展(并非每个段落都必须包含数学模式)。有什么建议/提示吗?提前感谢!

编辑:

  1. 我正在使用与Perl兼容的正则表达式(确切地说,是Sublime Text 3)。
  2. "错误"命令是不在数学模式下的宏,后跟一个空格。"好"命令是一个宏,后跟其他任何内容(标点符号或反斜杠)或数学模式中的任何宏。

Sublime Text 使用 Boost 库来处理正则表达式,因此它与 Perl 不完全兼容。

真正兼容 Perl 的答案是:

$.*?$(*SKIP)(*FAIL)|\w+(?=s)

演示

但不幸的是,您不能将(*SKIP)(*FAIL)技巧与 Boost 一起使用(直到实现此功能请求)。

你可以像这样解决这个问题:

$.*?$K|\w+(?(?=s)|K)

演示

这种方法的问题在于"错误"命令和数学模式结束标记仍将产生空(零长度)匹配(感谢K)。我不知道这对你来说是否足够好。

最新更新