主要代码如下:int main(int argc, char* argv[])
{
char str1[MAX_PATH] = {0};
::strcpy(str1, "select\\b\\s[a-z]*\\s\\bfrom\\b\\s\\w+");
regex expression(str1); std::string in;
cmatch what;
while(true)
{
char szIn[MAX_PATH*2] = {0}; ::strcpy(szIn, "aaaselect b from aaa");
if(regex_match(szIn, what, expression))
{
for(int i=0;i<what.size();i++)
cout<<"str :"<<what[i].str()<<endl;
}
else
{
cout<<"Error Input"<<endl;
}
break;
}
return 0;
}如上代码,如果szIn的值为"aaaselect b from aaa",得到的结果是匹配失败,即输出"Error Input"
可是如果szIn的值为"select b from aaa",就能匹配成功。我的问题是:如果正则式前面没有加^,应该是表示匹配的字符串可以在任何位置吧(而不一定要在开始位置).但,为什么上面的例子,szIn中的字符串也必须开始就是select,才能匹配成功?而前面有任何其它字符(aaa)就匹配失败呢?是不是应该还做什么设置?谢谢~
{
char str1[MAX_PATH] = {0};
::strcpy(str1, "select\\b\\s[a-z]*\\s\\bfrom\\b\\s\\w+");
regex expression(str1); std::string in;
cmatch what;
while(true)
{
char szIn[MAX_PATH*2] = {0}; ::strcpy(szIn, "aaaselect b from aaa");
if(regex_match(szIn, what, expression))
{
for(int i=0;i<what.size();i++)
cout<<"str :"<<what[i].str()<<endl;
}
else
{
cout<<"Error Input"<<endl;
}
break;
}
return 0;
}如上代码,如果szIn的值为"aaaselect b from aaa",得到的结果是匹配失败,即输出"Error Input"
可是如果szIn的值为"select b from aaa",就能匹配成功。我的问题是:如果正则式前面没有加^,应该是表示匹配的字符串可以在任何位置吧(而不一定要在开始位置).但,为什么上面的例子,szIn中的字符串也必须开始就是select,才能匹配成功?而前面有任何其它字符(aaa)就匹配失败呢?是不是应该还做什么设置?谢谢~
测试字符串:aaaselect b from aaa匹配结果:select b from aaa用地是微软的正则接口。
按理说,默认情况下,不写前面不写^就可以了啊??
http://community.csdn.net/Expert/TopicView3.asp?id=4919766
\bselect\b....推荐搂主一篇文章:
http://www.regexlab.com/zh/regref.htm另外:注意区分 boost 的 regex_match() 和 regex_search():
regex_match() 要求必须是开头位置
"matches all of a given character sequence"因此,regex_match() 不光是要求开头位置,而且要求刚好匹配到字符串结束位置。事实上,regex_match()操作 应该是 regex_search() 操作中的其中一步。换句话说,regex_search() 执行了多次 regex_match() 操作,相当于 compare 与 find 操作的关系。