2012-05-01 69 views
1

我想在一個字符串中做兩個替換,並且我知道如何在php中編寫正則表達式,但我不熟悉C++ boost。如何在C++ boost中編寫這些正則表達式?

// Replace all doubled-up <BR> tags with <P> tags, and remove fonts. 
    $string = preg_replace("/<br\/?>[ \r\n\s]*<br\/?>/i", "</p><p>", $string); 
    $string = preg_replace("/<\/?font[^>]*>/i", "", $string); 

如何在C++ boost中編寫代碼?

在此先感謝。

+3

嗯,你嘗試了嗎?你得到什麼錯誤/問題? – Mat

+0

這些正則表達式可以正常工作,但是您需要將您的正則表達式轉義字符加倍轉義(例如,\ r應該是\\ r),因爲\也恰好是C++中的字符串轉義字符。 – Benj

+0

我使用了雙轉義字符並試過,但它並沒有取代任何東西... – luyi0619

回答

1

適用所有常用的warnings about parsing HTML with regexes

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

int main() 
{ 
    boost::regex double_br("<br/?>[ \\r\\n\\s]*<br/?>", boost::regex::icase); 
    boost::regex fonts("</?font[^>]*>", boost::regex::icase); 

    std::string cases[] = { 
    "foo<br><br>bar", 
    "one<br/><br>two", 
    "a<br> <br/>b", 
    "a<br><br>c<br/><br/>d", 
    "<font attr=\"value\">w00t!</font>", 
    "<font attr=\"value\">hello</font><font>bye</font>", 
    "" 
    }; 

    for (std::string *s = cases; *s != ""; ++s) { 
    std::cout << *s << ":\n"; 

    std::string result; 
    result = boost::regex_replace(*s, double_br, "</p><p>"); 
    result = boost::regex_replace(result, fonts, ""); 

    std::cout << " - [" << result << "]\n"; 
    } 

    return 0; 
} 

輸出:

foo<br><br>bar: 
    - [foo</p><p>bar] 
one<br/><br>two: 
    - [one</p><p>two] 
a<br> <br/>b: 
    - [a</p><p>b] 
a<br><br>c<br/><br/>d: 
    - [a</p><p>c</p><p>d] 
<font attr="value">w00t!</font>: 
    - [w00t!] 
<font attr="value">hello</font><font>bye</font>: 
    - [hellobye]