C++带有捕获组的正则表达式字符串文本

C++ regex string literal with capturing group

本文关键字:正则表达式 字符串 文本 C++      更新时间:2023-10-16

我有一个包含反斜杠、双引号的 std::字符串。我想使用捕获组提取子字符串,但我无法获得正确的语法。 例如

std::string str(R"(some"string"name":"john""lastname":"doe")");  //==> want to extract "john"
std::regex re(R"(some"string"name":")"(.*)R"(""lastname":"doe")");    //==> wrong syntax
std::smatch match;
std::string name;
if (std::regex_search(str, match, re) && match.size() > 1)
{
name = match.str(1);
}
  1. 使用字符串中没有出现的分度计。 例如R"~( .... )~"

  2. 您仍然需要转义正则表达式的。为了匹配字面意思使用\.

  3. 您可能希望在找到尽可能短的匹配项后立即停止。所以使用(.*?)

    std::regex re(R"~(some\"string"name":"(.*?)"\"lastname":"doe")~");