我只是想乱用并熟悉在c ++中使用正则表达式。 假设我希望用户输入以下内容:### - $$ - ###,make#= 0-9之间的任何数字和$ = 0-5之间的任何数字。这是我实现这一目标的想法:
regex rx("[0-9][0-9][0-9]""\\-""[0-5][0-5]")
这不是确切的代码,但是通常的想法是检查用户的输入是否是有效的数字串。但是,假设我不允许以0开头的数字,所以:099-55-999是不可接受的。如何查看类似的内容并输出无效?感谢
答案 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的回答。 执行注意数字元字符的双\
。