2016-07-18 84 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