C++11 原生已经支持了正则表达式,下面是一些简单的函数小测试
regex_search
#include <regex>
#include <string>
#include <iostream>
using namespace std;
void main()
{
string str = "today is july 16th";
//regex_search搜索指定字符串
//但是只能返回第一个匹配的项
const regex pattern( "\\d+" );
match_results what;
if( regex_search( str, what, pattern ) )
cout << what[0] << endl;
//输出:
//16
//
//要一次性搜索所有匹配项的话
const regex pattern2( "[a-zA-Z]+" );
sregex_token_iterator ti( str.cbegin(), str.cend(), pattern2 );
const std::sregex_token_iterator end;
for( ; ti != end; ti++ )
cout << *ti << endl;
/*
输出:
today
is
july
th
*/
}
regex_match
void main()
{
string str;
//cin >> str; //bug: cin会处理空格为结束符
getline( cin, str );
const regex pattern( "\\s*(\\d+)\\s*([\\+\\-\\*\\/])\\s*(\\d+)\\s*" );
match_results result;
//regex_match 匹配
// -必须整式全部匹配,不然会false
// -括号‘()’内的匹配后将在result数组中保存 (从1开始)
if( regex_match( str, result, pattern ) ) {
cout << result[1] << endl;
cout << result[2] << endl;
cout << result[3] << endl;
}
/*
输入:
165+335
输出:
165
+
335
*/
}