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

标签 c++ regex quotes

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

id=\"([^\"]+)\"|title=\"([^\"]+)\"

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

id="60973129" title="EPA"

这是我正在使用的 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];
    }
}

编辑:我发现如果单独放置,title=\"(.+?)\" 确实有效,但是我不得不使用几个正则表达式,这违背了我的目的,因为我稍后将需要扫描更长的行。

最佳答案

它可能在测试器中有效,因为它说的是字符串中“是否匹配”,而不是“整个匹配”。

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

关于c++ - 正则表达式适用于正则表达式测试器但不适用于 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16421278/

相关文章:

Java String.使用 OR 管道匹配正则表达式

mysql - MySQL 中何时使用单引号、双引号和反引号

C++: Makefile: 目标文件没有编译?然后说找不到对象

c++ - 是否有当前使用的带有 C++ 编译器的系统,其中 int 超过 32 位宽?

php - 如何在正则表达式中验证 BIGINT

regex - 正则表达式匹配非空引号子字符串

forms - 在带有 Blade 模板的表单中使用 laravelcollective/html 时防止转义单引号

c++ - 从 FFT 样本计算频率?

c++ - 编辑控件替换背景需要选择HBRUSH吗?

javascript - 正则表达式匹配本地 Markdown 链接