Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 特定latex命令中单词*not*的正则表达式_Regex - Fatal编程技术网

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

Regex 特定latex命令中单词*not*的正则表达式,regex,Regex,我正在寻找一个正则表达式,它将匹配所有出现的foo,除非它位于\ref{..}命令中。所以\ref{sec:foo}不应该匹配 我可能想添加更多的命令,稍后应该排除这些命令的参数,这样解决方案就可以在这方面进行扩展 有一些类似的问题试图检测什么东西在括号中,等等 第一个选项使用了一个有趣的解决方案:\(.*?\)|(,)第一个选项匹配不需要的版本,第二个选项匹配组。然而,由于我在搜索和替换上下文中使用它,所以我无法真正使用匹配组。查找所需的正则表达式将需要可变长度的查找,这只适用于非常有

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

我可能想添加更多的命令,稍后应该排除这些命令的参数,这样解决方案就可以在这方面进行扩展

有一些类似的问题试图检测什么东西在括号中,等等


第一个选项使用了一个有趣的解决方案:
\(.*?\)|(,)
第一个选项匹配不需要的版本,第二个选项匹配组。然而,由于我在搜索和替换上下文中使用它,所以我无法真正使用匹配组。

查找所需的正则表达式将需要可变长度的查找,这只适用于非常有限的语言(如Python中的C#和PyPi),因此您将不得不使用不太完美的正则表达式。您可以使用此正则表达式来匹配不在花括号内的
foo
,只要您没有花括号嵌套

\bfoo\b(?![^{}]*})
这与
\ref{sec:foo}
内部的
foo
不匹配,甚至与
somethingelse{sec:foo}
也不匹配,因为您可以看到它只与不包含在大括号中的
foo
不匹配。如果您需要一个精确的解决方案,那么它将需要可变长度的look-behind支持,正如我所说的,它在非常有限的语言中可用


您使用的是什么语言?是的,其他答案也建议您使用这种语言,但这并不是我真正想要的,因为我想确保我知道所有以参数形式出现的latex命令。在这种情况下,我建议您使用自定义解析器。安全高效。我不确定为latex编写自定义解析器是否能以高效的方式完成我不知道乳胶的事,但如果你能给我一些想法,也许我可以试着帮你。比如,给我看一些样本数据和你对这些数据的预期输出?