Russian Qt Forum

Qt => Вопросы новичков => Тема начата: aliks-os от Апрель 08, 2011, 10:44



Название: Регулярное выражение
Отправлено: aliks-os от Апрель 08, 2011, 10:44
Я никогда не работал с регулярными выражениями, помогите пожалуйста.

Имеется к примеру вот такая строка
Код:
CREATE DEFINER = 'sa'@'%'
PROCEDURE kadry_test.procedure2()
BEGIN

END

Мне необходимо выделить из нее: kadry_test.procedure2(),
т.е. слово которое следует после слова PROCEDURE и заканчивается скобкой

Помогите пожалуйста люди добрые


Название: Re: Регулярное выражение
Отправлено: madRoger от Апрель 08, 2011, 12:43
Можно попробовать так:

QRegExp rx("PROCEDURE ([0-9A-Za-z._]{1,}\\(\\))");
результат будет в rx.cap(1)


Название: Re: Регулярное выражение
Отправлено: aliks-os от Апрель 08, 2011, 13:55
Спасибо, но уже извратился и написал без рег.выражения, может кому и пригодиться
Код:
            QString tmpTxt;   //Текст который разбираем
            QString tmp;
            if (mode_ == PROC) tmp = "PROCEDURE ";
            if (mode_ == FUNC) tmp = "FUNCTION ";
            if (mode_ == TRG)  tmp = "TRIGGER ";
            QString procName_ = "";  //То что получаем на в результате
            int st = tmpTxt.indexOf(tmp,0,Qt::CaseInsensitive)+tmp.length();
            while (st<tmpTxt.length()) {
                if ((tmpTxt[st].isSpace() || !tmpTxt[st].isPrint()) && !procName_.isEmpty() )
                    break;

                if (!tmpTxt[st].isSpace() && tmpTxt[st].isPrint() && tmpTxt[st]!='(' && tmpTxt[st]!=')')
                    if (tmpTxt[st].isPrint()) {
                        procName_ += tmpTxt[st];
                    }
                ++st;
            }