C ++简单使用正则表达式

时间:2011-12-02 21:44:51

标签: c++ regex visual-studio-2010 boost-regex

我只是想乱用并熟悉在c ++中使用正则表达式。 假设我希望用户输入以下内容:### - $$ - ###,make#= 0-9之间的任何数字和$ = 0-5之间的任何数字。这是我实现这一目标的想法:

regex rx("[0-9][0-9][0-9]""\\-""[0-5][0-5]")

这不是确切的代码,但是通常的想法是检查用户的输入是否是有效的数字串。但是,假设我不允许以0开头的数字,所以:099-55-999是不可接受的。如何查看类似的内容并输出无效?感谢

3 个答案:

答案 0 :(得分:4)

[0-9]{3}-[0-5]{2}-[0-9]{3}

匹配一个字符串,该字符串以0到9之间的三位数字开头,后跟一个破折号,后跟两个0到5之间的数字,后跟一个破折号,后跟0到9之间的三个数字。

这就是你要找的东西吗?这是非常基本的正则表达式。我建议你看一下good tutorial

编辑:(在您更改问题后):

[1-9][0-9]{2}-[0-5]{2}-[0-9]{3}
除了不允许将0作为第一个字符外,

将与上述相同。

答案 1 :(得分:1)

std::tr1::regex rx("[0-9]{3}-[0-5]{2}-[0-9]{3}");

你谈到在c ++中正确使用tr1正则表达而不是托管c ++?如果是这样,请转到here解释这些内容。

另外,你应该知道,如果你使用的VS2010不再需要升级库用于正则表达式。

答案 2 :(得分:1)

试试这个:

#include <regex>
#include <iostream>
#include <string>

int main()
{
    std::tr1::regex rx("\\d{3}-[0-5]{2}-\\d{3}");
    std::string s;
    std::getline(std::cin,s);
    if(regex_match(s.begin(),s.end(),rx))
    {
        std::cout << "Matched!" << std::endl;
    }
}

有关解释,请查看@Tim的回答。 执行注意数字元字符的双\