我需要删除字符串的前导和尾随空格。它来自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
,所以我希望我能弄清楚如何使用它。
答案 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);