2016-07-18 63 views
1

我想在特克斯数学模式之外去除花括号。例如:删除特克斯数学模式外的花括号

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

应该变成:

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

正如你真的不能否定的正则表达式我一直在寻找进入查询aheads和-behinds。从技术上讲,这对我来说并不合适,{作者}也在两美元符号之间。一些正规的专业人士对我有一些建议?

我很想只在问题不太复杂的情况下使用preg_replace。

回答

1

您可以使用此前瞻基于正则表达式:

$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)跳过数学模块,并在文本的其余部分替代{}

+0

谢谢@WiktorStribiżew,我也在回答 – anubhava

+1

中添加了该选项非常感谢,我检查了我的2.1GHz双核笔记本电脑上PHP 5.5.9的执行时间。差别很明显但很小。 100k preg_replace调用,然后平均给出大致:负面看法:4.5 * 10^-6秒/ preg_replace和PCRE:4.0 * 10^-6秒/ preg_replace – Wipster

+0

我注意到正则表达式会删除所有大括号的这种情况:“ $ \ mathbb {R} $ dolore。{作者}“你有什么建议需要改变,以便在美元之前存在空格时也能工作? – Wipster