【问题标题】:RegEx not working for all inputs in C++RegEx 不适用于 C++ 中的所有输入
【发布时间】:2016-11-07 01:36:27
【问题描述】:

我在 C++ 中使用以下正则表达式

std::regex base_regex("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?");

它拒绝以下输入

email@subdomain.domain.com

java 和 js 也一样。谁能解释一下

【问题讨论】:

  • 在我只匹配这个测试的测试中,regex_match 函数返回真值。
  • 什么编译器/版本?
  • 视觉工作室 2010
  • 我可以看到它接受 a@cccccb.c 但不接受 a@cccc.ccb.c 或 a@c.cc.c.ccb.c 或 a@cc.ccccb。 c 这意味着它在倒数第二个“。”之前的域部分中不接受多个字符。但我在正则表达式中找不到错误
  • 按预期工作Demo。可能是旧 vs2010 中的一个错误。

标签: c++ regex


【解决方案1】:

我用 vs2010 和 vs2015 尝试了你的正则表达式。在 vs2010 中比赛失败了,在 2015 年没有。所以我认为是vs2010实现的一个错误。 如果你尝试一些不同的正则表达式:

std::regex base_regex("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9]+\\.)+[A-Za-z0-9]+");

它有效。 我简化了表达。而不是:

[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?

我用过

[A-Za-z0-9]+

它不相等,因为它在域/子域名的开头或结尾接受“-”,但也许它适合你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多