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

Php 删除texs数学模式之外的大括号,php,regex,curly-braces,math-mode,Php,Regex,Curly Braces,Math Mode,我想在texs数学模式之外去掉大括号。例如: Lorem Ipsum $\mathbb{R}$ dolore. {Author} $\{1,\dotsc,n}$ 应成为: Lorem Ipsum $\mathbb{R}$ dolore. Author $\{1,\dotsc,n}$ 因为你不能真正否定正则表达式,所以我一直在研究它。从技术上讲,这对我不起作用,{Author}也在两个美元符号之间。一些regex专业人士给了我一些建议 我只希望在问题不太复杂的情况下使用preg_replace

我想在texs数学模式之外去掉大括号。例如:

Lorem Ipsum $\mathbb{R}$ dolore. {Author} $\{1,\dotsc,n}$
应成为:

Lorem Ipsum $\mathbb{R}$ dolore. Author $\{1,\dotsc,n}$
因为你不能真正否定正则表达式,所以我一直在研究它。从技术上讲,这对我不起作用,{Author}也在两个美元符号之间。一些regex专业人士给了我一些建议


我只希望在问题不太复杂的情况下使用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}$ 


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

谢谢@WiktorStribiżew,我在回答中也添加了该选项非常感谢,我用PHP5.5.9在我的2.1GHz双核笔记本电脑上检查了两者的执行时间。差别是明显的,但很小。100k preg_replace调用,然后平均给出大致:负前瞻:4.5*10^-6秒/preg_replace和PCRE:4.0*10^-6秒/preg_replace我注意到正则表达式将删除此类情况下的所有大括号:“$\mathb{R}$dolore.{Author}”你有什么建议吗?当美元前有空格时,什么需要改变才能起作用?这很有魅力。非常感谢你。