我一直在网上寻找没有成功的东西,但是做了以下事情。我有一些丑陋的字符串作为Betfair SOAP响应的一部分返回,它使用许多不同的字符分隔符来识别信息的某些部分。让它变得尴尬的是它们并不总是只有一个字符长度。具体来说,我需要在':'
个字符处拆分字符串,但只有在我第一次用我的个人标记"\\:"
替换"-COLON-"
的所有实例之后然后在第一次拆分后再次更换)。
基本上我需要像这样的字符串的所有部分
"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::find
和std::replace
,我知道我可以使用这些基本功能编写如何做我需要的功能,但我想知道标准库(或其他地方)中是否有一个功能已经完成了这个?
答案 0 :(得分:5)
答案 1 :(得分: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
命名空间中的任何内容。例如,仅使用提供的格式替换第一次出现的正则表达式匹配。