C ++字符串值控制

时间:2016-05-05 08:29:13

标签: c++ regex visual-studio

我想用正则表达式控制我的价值。

示例:

string value1 =" {1N851111-8M32-2234-B83K-123456789012}&#34 ;; //很好

正则表达式:

std::regex control("^[{]{8}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{12}[A-Za-z0-9]$[}]");

源代码:

#include "stdafx.h"
#include <regex>
#include <string>
using namespace std;


int main()
{
    std::string code1 = "{1N851111-8M32-2234-B83K-123456789012}";
    std::regex control("^[{]{8}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{4}[A-Za-z0-9]{1}[-]{12}[A-Za-z0-9]$[}]");
    std::smatch match;

    if (std::regex_search(code1, match, control))
    {
        std::cout << "MAtch found";

    }

    else
    {
        std::cout << "Match not found";
    }

    return 0;
}

我的输出:

Match not found

1 个答案:

答案 0 :(得分:1)

将正则表达式声明更改为

std::regex control("^[{][A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}[}]$");

请参阅regex demoIDEONE demo

你误用了限制量词。看:

  • [{]{8} - 匹配8个{符号
  • [A-Za-z0-9]{1} - 匹配1个字母或数字
  • [-]{4} - 匹配4个连字符等

此外,您在最后一个$之前设置了}字符串结尾锚点,因此,该模式在字符串结尾后查找},但是自动匹配。