特定 latex 命令中单词 *not* 的正则表达式



我正在寻找一个正则表达式,除非它在ref{..}命令中,否则它将匹配所有出现的foo。所以ref{sec:foo}不应该匹配。

我可能想添加更多命令,稍后应排除这些命令的参数,因此解决方案在这方面应该是可扩展的。

有一些类似的问题试图检测括号中的内容等。

  • 正则表达式仅匹配括号中的逗号?
  • 如果不在方括号或括号内,则用逗号分隔字符串

第一个有一个使用替代项的有趣解决方案:(.*?)|(,)第一个替代项匹配不需要的版本,第二个替代项具有匹配组。但是,由于我在搜索和替换上下文中使用它,因此我无法真正使用匹配组。

为你想要的东西找到一个正则表达式将需要可变长度的后面查看,这仅适用于非常有限的语言(如 Python 中的 C# 和 PyPi(,因此你将不得不解决一个不太完美的问题。您可以使用此正则表达式来匹配不在大括号内的foo,只要您没有大括号嵌套的大括号,

bfoob(?![^{}]*})

这不会匹配ref{sec:foo}内部甚至somethingelse{sec:foo}中的foo,因为您可以看到它只与未包含在大括号中的foo不匹配。如果您需要精确的解决方案,那么它将需要可变长度的背后支持,正如我所说,支持的语言非常有限。

正则表达式演示

最新更新