C++ std::regex不匹配

C++ std::regex不匹配,c++,regex,parsing,split,C++,Regex,Parsing,Split,我有一个可以正常工作的正则表达式: 如预期的,有2个匹配项 现在我想把它和性病分开: 这可以很好地编译,但没有打印到标准输出 我认为正则表达式必须以其他方式编写,您能指出我的错误吗?您需要使用\\逃逸。此外,开头的\gm和\应该被删除为:?您需要使用\\转义。此外,开头的\gm和\应删除为:?您可以使用 const std::regex ws_re(R"(\[([^\]\[]*)\])"); 此外,确保通过将1作为最后一个参数传递给std::sregx_token_迭代器(

我有一个可以正常工作的正则表达式:

如预期的,有2个匹配项

现在我想把它和性病分开:

这可以很好地编译,但没有打印到标准输出

我认为正则表达式必须以其他方式编写,您能指出我的错误吗?

您需要使用\\逃逸。此外,开头的\gm和\应该被删除为:?您需要使用\\转义。此外,开头的\gm和\应删除为:?您可以使用

const std::regex ws_re(R"(\[([^\]\[]*)\])");
此外,确保通过将1作为最后一个参数传递给std::sregx_token_迭代器(而不是在拆分时使用-1-1)来提取组1值

R\[^\]\[]*\]是一个原始字符串文本,用于定义\[^\]\[]*\]正则表达式模式。相配

\[-a[char] [^\]\[]*-第1组:除[和]之外的任何零个或多个字符 \]-a]char。 见:

包括 包括 包括 使用名称空间std; int main{ const std::string text=这是一个测试字符串[或多或少],这里是[另一个]。; 常量std::regex ws_reR\[^\]\[]*\]; std::copy std::sregex_token_iteratortext.begin,text.end,ws_re,1, std::sregex_令牌迭代器, std::ostream\u迭代器std::cout\n; 返回0; } 你可以用

const std::regex ws_re(R"(\[([^\]\[]*)\])");
此外,确保通过将1作为最后一个参数传递给std::sregx_token_迭代器(而不是在拆分时使用-1-1)来提取组1值

R\[^\]\[]*\]是一个原始字符串文本,用于定义\[^\]\[]*\]正则表达式模式。相配

\[-a[char] [^\]\[]*-第1组:除[和]之外的任何零个或多个字符 \]-a]char。 见:

包括 包括 包括 使用名称空间std; int main{ const std::string text=这是一个测试字符串[或多或少],这里是[另一个]。; 常量std::regex ws_reR\[^\]\[]*\]; std::copy std::sregex_token_iteratortext.begin,text.end,ws_re,1, std::sregex_令牌迭代器, std::ostream\u迭代器std::cout\n; 返回0; }
\必须转义或应使用原始字符串文字。使用\\?尝试或使用原始字符串。您不应该在regexp中有\gm。为什么第一个括号转义,而其他不转义?\必须转义或应使用原始字符串文字。使用\\?尝试或使用原始字符串。您不应该在regexp中有\gm。为什么第一个括号转义,但是其他的不行?不行。抱歉。您说过应该删除\gm,但您没有删除它。哦,我明白了,括号不应该转义。你能试试吗?请在发帖前试试。仍然不工作…不工作。抱歉。您说过应该删除\gm,但您没有删除它。哦,我明白了,括号不应该转义。你能试试吗?请在发帖前试试。仍然不起作用…这是有效的,我可以在正则表达式中使用lookaheads吗?@Daniel你可以在std::regex中使用lookaheads,但不能使用lookbehinds。否则,使用boost::regex,那么您就可以使用所有的lookarounds。这很有效,我可以在regex中使用lookaheads吗?@Daniel您可以在std::regex中使用lookaheads,但不能使用lookbehinds。否则,使用boost::regex,您将能够使用所有的lookarounds。