2012-12-18 22 views
1

具體特徵使用Boost的正則表達式我有一個這樣的字符串:括號之間越來越有在C++中沒有得到答案

This is a link [[abcd 1234|xyz 1234]] [[India]] [[abcd 1234|xyz 1234]] 

,我想:

This is a link abcd 1234 [[India]] abcd 1234 

我想帶雙方括號有|並取出以前的東西並將其替換爲整個雙方括號內的東西而不是替換任何沒有|的雙方括號使用Boost Regex。

任何幫助將不勝感激。

+0

1'我想爲呈現雙括號|並取出以前的東西並將其替換爲整個雙方括號內的東西而不是替換任何沒有|的雙方括號使用Boost Regex.'這句話沒有任何意義...... 2.我認爲正則表達式可能不是這裏的方式,它們不適合匹配開啓/關閉括號。 – BoBTFish

+0

隨着正則表達式我總是懷疑是否有更好的方法來做到這一點。而且我感到無聊,所以我想出了一個使用'std :: string'設施的方法。我會讓你決定它是否更好,但[在這裏](http://ideone.com/hJyhJ4)。 – BoBTFish

回答

1

只需使用前瞻,(?!pattern)

#include <iostream> 
#include <string> 
#include <boost/regex.hpp> 

int main() 
{ 
    std::string str = "This is a link [[abcd 1234|xyz 1234]] [[India]] [[abcd 1234|xyz 1234]]"; 
    boost::regex re("\\[\\[(((?!\\]\\]).)+)\\|.*?]]"); 
    std::cout << boost::regex_replace(str, re, "$1") << '\n'; 
} 

演示:http://liveworkspace.org/code/2Mu5cN

+0

謝謝你讓我的一天,你可以同樣提供正則表達式獲得xyz 1234在字符串中的abcd 1234位置? – psyche

+0

@PragneshPatel沒有任何竅門,只是在'|'之後捕獲(。)括號中的'。*?',並在'$ 1'中改變數字(在這種情況下改爲$ 3) – Cubbi

+0

你真棒謝謝 – psyche

0
"\\[\\[(.*?)\|.*?]]" 

這將匹配與|分離[[]]之間的文本。 $1[[|之間的文本。

+0

這不是貪婪嗎? – BoBTFish

+0

@PeteBecker [[印度]]被選中,並將其替換爲印度]] [[abcd 1234這是主要問題我也嘗試過在提問前告訴同一件事謝謝你的時間 – psyche

+0

@BoBTFish我們可以做些什麼如果在|之前遇到[[if]]之後比與正則表達式不匹配? – psyche