正则表达式适用于正则表达式测试器,但不适用于 C++

Mik*_*lis 5 c++ regex quotes

我正在尝试获取文件中引号之间的内容,并且我正在使用正则表达式。这是我正在使用的正则表达式:

id=\"([^\"]+)\"|title=\"([^\"]+)\"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,每个特殊字符都被转义了。它在正则表达式测试器中完美运行,但在 C++ 代码中使用时找不到标题。ID总能找到就好。我尝试了几种变体,甚至删除了一半(之前|)

id="60973129" title="EPA"
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的 C++ 代码:

std::regex rgx("id=\"([^\"]+)\"|title=\"([^\"]+)\"");
std::smatch match;

if (std::regex_search(line, match, rgx)) {
    for (int i=0; i < match.size(); ++i) {
            std::cout << match[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我发现如果分开放置,title=\"(.+?)\"确实可以工作,但是我必须使用多个正则表达式,这违背了我的目的,因为稍后我需要扫描更长的行。

use*_*075 2

它可能在测试器中起作用,因为它在字符串中说“所有内容都匹配”,而不是“整个内容都匹配”。

无论如何,| 是一个“或”,找出其中一个。要匹配所示的字符串,请更改 | 到一个空格,或者任何数量的空白的指示符,例如 [ \t]+ ,我怀疑它会正常工作。