2012-12-21 68 views
0

我必須從文本中剝離一些XML標記並保留其值。替換爲無提升

text text <tag>tag_value</tag> text text <a href="example.com">example.com</a> 
-> 
text text tag_value text text example.com 

到目前爲止,我已經使用boost_replace但現在我不能夠使用該庫。

std::string src(text); 
std::string fmt =""; 
std::string ex = "(<tag attribute=\"(.*?)\">)|(</tag>)|(<a href(.*?)\">)|(</a>)|(<tag>)|(</tag>))"; 
boost::regex expr(ex); 
std::string s2 = boost::regex_replace(src, expr, fmt, boost::match_default | boost::format_all); 

我該如何解決這個問題?什麼圖書館可以幫助我做到這一點?謝謝

+1

如果您無法使用Boost,那麼您的庫選擇的標準是什麼(例如,哪些庫也不可接受)? –

+0

只是'輕量'是可以接受的 – user1112008

+0

什麼是不可接受的提升?在最終的可執行文件中,您只會擁有您實際使用的Boost部分,這些都是您應該真正關心的。您不必讓任何用戶下載大約600多MB的文件,以便他們擁有「全部提升」。 –

回答

1

永遠不要使用正則表達式來解析XML!

RegEx match open tags except XHTML self-contained tags

你需要一個像外籍人士或libxml2的一個真正的XML庫。

+0

問題是關於*剝離*標籤,沒有任何進一步的處理。這裏可以使用regexps。 –

+0

它仍然相關。拋出一個'[[[CDATA'在那裏或'<! - '註釋塊並觀察正則表達式崩潰。 – StilesCrisis

+0

好的,沒有簡單的正則表達式解決方案,但是,我仍然認爲這是過度的*這裏*使用全面的解析器。 –