使用std :: regex替换前导和尾随空格?

时间:2017-10-30 18:31:10

标签: c++ regex string c++11

我需要删除字符串的前导和尾随空格。它来自tinyxml2中的GetText(),其中可能包含\t\n个字符,如果我打印出文本,这些字符看起来不太好。

据我所知,这行是std::regex的正确语法。我已使用online regex验证了正则表达式。

std::string Printer::trim(const std::string & str)
{
   return std::regex_replace(str, std::regex("^\s+|\s+$"), "", std::regex_constants::format_default);
}

我的理解是它将用空字符串替换所有前导和尾随空格。这有效地消除了尾随和前一个空格。

传入测试字符串\t\t\t\nhello world\t\t\n后,会返回字符串\t\t\t\nhello world\t\t\n,输出应为hello world

我的另一个问题是c ++使用与ECMAScript完全相同的正则表达式语法吗?与使用string.substr()

等传统方法相比,使用正则表达式会产生什么样的性能成本?

我知道还有其他方法可以实现相同的效果,但我计划在项目的其他地方使用std::regex,所以我希望我能弄清楚如何使用它。

1 个答案:

答案 0 :(得分:1)

你需要转义regexp字符串中的反斜杠,这样它们就会被传递到regex库。

return std::regex_replace(str, std::regex("^\\s+|\\s+$"), "", std::regex_constants::format_default);

或者从C ++ 11开始,您可以使用原始字符串文字:

return std::regex_replace(str, std::regex(R"^\s+|\s+$"), "", std::regex_constants::format_default);