2013-10-19 25 views
0

我想從wxWidgets中的一些html代碼中提取一個子串,但是我無法讓我的方法正常工作。wxWidgets錯誤的子串

內容to_parse的:

[HTML CODE]

<html><head></head><body><font face="Segue UI" size=2 .....<font face="Segoe UI"size="2" color="#000FFF"><font face="@DFKai-SB" ... <b><u> the text </u></b></font></font></font></body></html> 

[/ HTML CODE](關於格式抱歉)

wxString to_parse = SOStream.GetString(); 

size_t spos = to_parse.find_last_of("<font face=",wxString::npos); 
size_t epos = to_parse.find_first_of("</font>",wxString::npos); 

wxString retstring(to_parse.Mid(spos,epos)); 
wxMessageBox(retstring); // Output: always ---> tml> 

由於有多種字體面標籤在HTML to_parse變量我想找到最後一個<"font face=的位置和第一個<"/font>"關閉標記的位置。

出於某種原因,只能獲得同樣我意外輸出tml>

任何人能找出原因?

回答

0

方法find_{last,first}_of()不會做你認爲他們做的事情,它們的行爲方式與std::basic_string<>方法相同,找到傳遞給它們的字符串的第一個(或最後一個)字符,請參閱the documentation

如果要搜索子字符串,請使用find()

0

謝謝你的回答。是的你是對的,我必須以某種方式在Subtring()/ substr()/ Mid()接受兩個wxStrings作爲參數的印象之下,事實並非如此。

wxString to_parse = SOStream.GetString(); 

to_parse = to_parse.Mid(to_parse.find("<p ")); disregarts everything before "<p " 
to_parse = to_parse.Remove(to_parse.find("</p>")); removes everything after "</p>" 

wxMessageBox(to_parse); // so we are left with everything between "<p" and "</p>"