【问题标题】:std::regex_error exception thrown at runtime运行时抛出 std::regex_error 异常
【发布时间】:2015-06-03 20:00:58
【问题描述】:

鉴于此代码有效:

regex r1{ "fish"s };
smatch m1;
if (regex_search("I love fish and chips"s, m1, r1))
    cout << m1[0] << endl;

我相信VS2015支持正则表达式。但是,这个正则表达式对象的初始化:

regex r{ R"(\d{2,3}(-\d\d) { 2 })" };

抛出std::regex_error 异常。初始化有什么问题?

【问题讨论】:

  • 尝试将{ 2 }(加上{留下的空格)替换为{2}-替换为\-
  • @Xufox 哇,伙计,你完全正确!这部分正则表达式 (-\d\d) { 2 } 需要写成 (-\d\d){2}
  • @Xufox 谢谢 :) 我花了一个小时来解决这个小错误。
  • @NikolayZhulikov:仅供参考,GCC 4.9.0 supports &lt;regex&gt;

标签: c++ regex c++11 visual-c++ visual-studio-2015


【解决方案1】:

所以,是的,正如 cmets 中提到的:

(\d{2,3}(-\d\d) { 2 })

应该是

(\d{2,3}(-\d\d){2})

否则{2} 与空间相关而不是(-\d\d),其他奇怪的事情也可能发生......

【讨论】:

    【解决方案2】:

    您的正则表达式中有错字。改变这个:

    regex r{ R"(\d{2,3}(-\d\d) { 2 })" };
    

    收件人:

    regex r{ R"(\d{2,3}(-\d\d){2})" };
    

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 2013-08-03
      • 2012-08-21
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2011-10-21
      相关资源
      最近更新 更多