如何使用正则表达式提取字符串的不匹配部分

时间:2017-02-12 19:59:28

标签: c++ regex visual-c++

当输入无效时,我正试图向用户显示一些消息。

我写了这个正则表达式来验证这个模式:( 10个字符的名字)(0-9之间的数字)

e.g。布鲁诺3

if (regex_match(user_input, e))
{
  cout << "input ok" << endl;
}
else
{
    if (group1 is invalid)
    {
        cout << "The name must have length less than 10 characters" << endl;
    }

    if (group2 is invalid)
    {
        cout << "The command must be between 0 - 9" << endl;
    }
}

当用户输入任何无效字符串时,是否可以知道哪些组无效并打印消息? 这样的事情:

{{1}}

1 个答案:

答案 0 :(得分:1)

我认为您希望与1 to 10 character匹配,然后匹配space个,然后匹配digit但只有2个

这是你想要的:

^([a-zA-Z]{1,10})( \d)$

注意

\w相当于[a-zA-Z0-9_]
因此,如果您只需要10个字符,则应使用[a-zA-Z]而不是\w

C ++代码

std::string string( "abcdABCDxy 9" );

std::basic_regex< char > regex( "^([a-zA-Z]{1,10})( \\d)$" );
std::match_results< std::string::const_iterator > m_result;

std::regex_match( string, m_result, regex );
std::cout << m_result[ 1 ] << '\n';   // group 1
std::cout << m_result[ 2 ] << '\n';   // group 2   

输出

1abcdABCDxy
 9