在 texs 数学模式之外删除大括号

Removing curly braces outside texs math-mode

我想在 texs 数学模式之外删除花括号。例如:

Lorem Ipsum $\mathbb{R}$ dolore. {Author} $\{1,\dotsc,n}$

应该变成:

Lorem Ipsum $\mathbb{R}$ dolore. Author $\{1,\dotsc,n}$

因为你不能真正否定正则表达式,所以我正在研究先行和后行。从技术上讲,这对我不起作用,{Author} 也在两个美元符号之间。一些正则表达式专家对我有什么建议吗?

我希望仅在问题不太复杂时才使用 preg_replace。

您可以使用这个基于前瞻的正则表达式:

$re = '/$\\w*{[^}]+}(*SKIP)(*F)|{[^}]*}/'; 
$str = "Lorem Ipsum $\mathbb{R}$ dolore. {Author} ${1,\dotsc,n}$"; 

$result = preg_replace($re, '', $str);

//=> Lorem Ipsum $\mathbb{R}$ dolore.  Author $\{1,\dotsc,n}$ 

RegEx Demo

这里我们使用 PCRE 动词 (*SKIP)(*F) 来跳过数学模式块并替换文本其余部分的 {}