2012-07-10 133 views
3

我一直在网上查找,但没有成功执行以下操作。我有一些丑陋的字符串作为Betfair SOAP响应的一部分返回,它使用许多不同的char分隔符来标识信息的某些部分。令人感到尴尬的是,它们并不总是只有一个字符长度。具体来说,我需要分割一个字符串':'字符,但只有在我第一次替换全部"\\:"实例与我的个人标志"-COLON-"(必须在第一次拆分后再次被替换)之后。用C++中的另一个std :: string替换给定std :: string的实例

基本上我需要一个字符串的所有部分这样

"6(2.5%,11\:08)~true~5.0~1162835723938~" 

成为

"6(2.5%,11-COLON-08)~true~5.0~1162835723938~ 

在perl的是(从存储器)

$mystring =~ s/\\:/-COLON-/g; 

我一直在寻找功能std::string,具体为std::findstd::replace,我知道我可以编写如何使用这些基本函数来完成我需要的功能,但是我想知道标准库(或其他地方)中是否有函数已经这样做?

+2

你看过C++ 11 RegEx工具吗? http://www.cplusplus.com/reference/std/regex/ 它包括匹配替换操作 http://www.cplusplus.com/reference/std/regex/match_replace/ – 2012-07-10 19:33:55

+0

我不太注重C++ 11作为我目前正在编写的编译器不支持C++ 11。无论如何感谢您的建议。 – mathematician1975 2012-07-10 19:38:31

+0

可能重复的[C++用另一个字符串替换字符串的一部分](http://stackoverflow.com/questions/3418231/c-replace-part-of-a-string-with-another-string) – Troubadour 2012-07-10 19:59:28

回答

1

如果你有C++ 11这样的事情应该做的伎俩:

#include <string> 
#include <regex> 

int main() 
{ 
std::string str("6(2.5%,11\\:08)~true~5.0~1162835723938~"); 
std::regex rx("\\:"); 
std::string fmt("-COLON-"); 
std::regex_replace(str, rx, fmt); 

return 0; 
} 

编辑:没有为匹配类型可选的第四个参数,以及其可以是std::regex_constants命名空间中的任何东西,我确实相信。例如,用所提供的格式替换仅第一次出现的正则表达式匹配。

相关问题