【问题标题】:regex works on regex tester but not in c++正则表达式适用于正则表达式测试器,但不适用于 C++
【发布时间】:2013-05-01 12:55:26
【问题描述】:

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

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

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

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=\"(.+?)\" 确实可以工作,但是我必须使用几个正则表达式,这违背了我的目的,因为我需要稍后扫描更长的行。

【问题讨论】:

  • 你能把代码显示在实际使用的地方吗?
  • 这不是问题,但这可以通过使用非贪婪重复来简化。而不是\"([^\"]+)\" 尝试\"(.+?)\"。
  • 这可能只是 sn-p 的问题,但看起来您将 match2 传递到 regex_search,然后迭代 match。
  • 是的,这只是sn-ps之间的错误。对不起!

标签: c++ regex quotes


【解决方案1】:

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

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

【讨论】:

  • id=\"([^\"]+)\" title=\"([^\"]+)\" 和 id=\"([^\"]+)\"[ \t]+title=\"([^\"]+)\" 都没有结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多