17.14 直接使用书中的例子:可以看到报告错误码为4(不匹配的方括号)
#include <iostream>
#include <regex>
using namespace std;
int main()
{
try {
regex r("[[:alnum:]+\\.(cpp|cxx|cc)$", regex::icase);
} catch (regex_error e) {
cout << e.what() << "\ncode: " << e.code() << endl;
}
return 0;
}
17.15
#include <iostream>
#include <regex>
using namespace std;
int main()
{
string pattern("[^c]ei");
pattern = "[[:alpha:]]*" + pattern + "[[:alpha:]]*";
regex r(pattern);
string s;
smatch result;
while ( cin >> s ) {
if (regex_search(s, result, r)) {
cout << "invalid word" << endl;
cout << result.str() << endl;
}
else
cout << "valid word" << endl;
}
return 0;
}
17.16 用"[^c]ei"初始化,则只与"?ei"形式的字符串匹配,即ei前只有一个字符,例如输入freind,只输出rei。
17.17
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string pattern("[^c]ei");
pattern = "[[:alpha:]]*" + pattern + "[[:alpha:]]*";
regex r(pattern);
string s;
getline(cin, s);
sregex_iterator it(s.begin(), s.end(), r);
for (sregex_iterator it(s.begin(), s.end(), r), end_it;
it != end_it; ++it) {
cout << it->str() << endl;
}
return 0;
}
17.18 改写for循环
for (sregex_iterator it(s.begin(), s.end(), r), end_it;
it != end_it; ++it) {
if (it->str() != "albeit" && it->str() != "neighbor")
cout << it->str() << endl;
}