Доброе время суток Ув. Коллеги!
Написал вот такую регулярку, для строки вида "someArg232 (not) in (val1, val2, ..., valX)" но столкнулся с проблемой - регулярное вырождение которое я написал, вытаскивает только лишь последнее число среди valX, можно ли каким либо способом в QRegExp выбрать не жадный алгоритм поиска и можно ли как либо исключить из вхождений некоторые скобки, если мне память не изменяет, в перловских регулярках, это делается при помощи знака $ после скобки, а в QRegExp, такой вариант вроде-бы не катит. :-)
совсем забыл, регулярное выражение собственно такое: "([\\w\\d]+)[ ]+((not[ ]+)?in)[ ]*\\([ ]*((\\d+)[, ]*)*\\)"
пока что сделал абы работало так:
int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	functionIn_NotIn("select in (12, 14, 99, 231, 7)");
	return a.exec();
}
void functionIn_NotIn(const QString &str)
{
	QRegExp values("(\\d+)");
	QRegExp argument("^([a-zA-Z_][a-zA-Z_0-9]*)");
	QRegExp operators("[ ]*(in|not)[ ]*");
	//QString str = "select in (12, 14, 99, 231, 7)";
	QStringList listValues;
	QStringList listArguments;
	QStringList listOperators;
	int pos = 0;
	while ((pos = values.indexIn(str, pos)) != -1) {
		listValues << values.cap(1);
		pos += values.matchedLength();
	}
	pos = 0;
	while ((pos = argument.indexIn(str, pos)) != -1) {
		listArguments << argument.cap(1);
		pos += argument.matchedLength();
	}
	pos = 0;
	while ((pos = operators.indexIn(str, pos)) != -1) {
		listOperators << operators.cap(1);
		pos += operators.matchedLength();
	}
	cout<<"----------listArguments------------"<<endl;
	for (int i=0;i<listArguments.count();i++)
	{
		cout<<listArguments.at(i).toStdString()<<endl;
	}
	cout<<"----------listValues------------"<<endl;
	for (int i=0;i<listValues.count();i++)
	{
		cout<<listValues.at(i).toStdString()<<endl;
	}
	cout<<"----------listOperators------------"<<endl;
	for (int i=0;i<listOperators.count();i++)
	{
		cout<<listOperators.at(i).toStdString()<<endl;
	}
}
Но чувствую, что это попахивает (прошу простить)фигнёй, и есть вариант менее затратный.