C++ Primer(第5版) 练习 17.23
练习 17.23 编写查找邮政编码的正则表达式。一个美国邮政编码可以由五位或九位数字组成。前五位数字和后四位数字之间可以用一个短横线分隔。
环境:Linux Ubuntu(云服务器)
工具:vim
代码块:
/*************************************************************************
> File Name: ex17.23.cpp
> Author:
> Mail:
> Created Time: Sun 18 Aug 2024 10:11:23 AM CST
************************************************************************/
#include<iostream>
#include<regex>
#include<string>
using namespace std;
bool valid(const smatch &m){
if(m[1].matched){
return m[3].matched && (m[4].matched == 0 || m[4].str() == " ");
}
else{
return !m[3].matched && m[4].str() == m[6].str();
}
}
int main(){
string postcode = "(\\d{5})([-])?(\\d{4})?";
regex r(postcode);
smatch m;
string s;
while(getline(cin, s)){
for(sregex_iterator it(s.begin(), s.end(), r), end_it; it != end_it; ++it){
if(valid(*it)){
cout<<"valid: "<<it->str()<<endl;
}
else{
cout<<"not valid: "<<it->str()<<endl;
}
}
}
return 0;
}