我正在尝试使用正则表达式来解析 SQL 语句,同时对“sregex_token_iterator”的行为感到困惑。
我的函数 f() 和 g() 看起来很相似,而前者打印两个句子,而后者 g() 只打印一个:
这是 f():
void f()
{
cout << "in f()" << endl;
string str = " where a <= 2 and b = 2";
smatch result;
regex pattern("(\\w+\\s*(<|=|>|<>|<=|>=)\\s*\\w+)");
const sregex_token_iterator end;
for (sregex_token_iterator it(str.begin(), str.end(), pattern); it != end; it ++)
{
cout << *it << endl;
}
}
这是 g():
void g()
{
cout << "in g()" << endl;
string str = " where a <= 2 and b = 2";
smatch result;
regex pattern("(\\w+\\s*(<|=|>|<>|<=|>=)\\s*\\w+)");
const sregex_token_iterator end;
for (sregex_token_iterator it(str.begin(), str.end(), pattern); it != end; it ++)
{
cout << *it << endl;
string cur = *it;
pattern = "(\\w+)\\s*<>\\s*(\\w+)";
if ( regex_match(cur, result, pattern) )
{
// cout <<"<>" << endl;
}
pattern = "(\\w+)\\s*=\\s*(\\w+)";
if ( regex_match(cur, result, pattern) ){}
pattern = "(\\w+)\\s*<\\s*(\\w+)";
if ( regex_match(cur, result, pattern) ){}
pattern = "(\\w+)\\s*>\\s*(\\w+)";
if ( regex_match(cur, result, pattern) ){}
pattern = "(\\w+)\\s*<=\\s*(\\w+)";
if ( regex_match(cur, result, pattern) ){}
pattern = "(\\w+)\\s*>=\\s*(\\w+)";
if ( regex_match(cur, result, pattern) ){}
}
}
我猜变量 'end'("const sregex_token_iterator end;") 在 g() 中发生了变化,或者“for”子句中的判断条件在它 ++ 之后失败了。
如果有,那是怎么发生的。我应该怎么做才能解决这个问题?