Russian Qt Forum

Qt => Общие вопросы => Тема начата: setjmp от Август 21, 2010, 19:52



Название: Регулярка для QRegExp.
Отправлено: setjmp от Август 21, 2010, 19:52
Помогите написать регулярное выражение для поиска e-mail адресов в тексте. Нашел в интернете множество, но ни один из них не работает в qt при помощи класса QRegExp. Заранее очень благодарен.


Название: Re: Регулярка для QRegExp.
Отправлено: merke от Август 21, 2010, 20:32
Можешь поступить по другому не используя регекспы, в цикле проходи твой текст, как только нарываешься на @(собачку) вырезай например mid'ом мыльник от позиции собачки влево до первого пробела и до позиции пробела справа от собачки.

 


Название: Re: Регулярка для QRegExp.
Отправлено: BRE от Август 21, 2010, 20:35
Можешь поступить по другому не используя регекспы, в цикле проходи твой текст, как только нарываешься на @(собачку) вырезай например mid'ом мыльник от позиции собачки влево до первого пробела и до позиции пробела справа от собачки.
А если это будет чем-то типа этого?
djfhdksjfh dfsf@sdfsdfd@dfsdfsdfsdf sdfsdf


Название: Re: Регулярка для QRegExp.
Отправлено: setjmp от Август 21, 2010, 20:41
Можешь поступить по другому не используя регекспы, в цикле проходи твой текст, как только нарываешься на @(собачку) вырезай например mid'ом мыльник от позиции собачки влево до первого пробела и до позиции пробела справа от собачки.
А если это будет чем-то типа этого?
djfhdksjfh dfsf@sdfsdfd@dfsdfsdfsdf sdfsdf
В проекте уже много раз используются рекспы в  других случаях. Не вижу смысла что то делать по другому уж теперь. 


Название: Re: Регулярка для QRegExp.
Отправлено: merke от Август 21, 2010, 20:43
в инете море примеров где используются рекспы для выбирания мыльников, поищи хорошо


Название: Re: Регулярка для QRegExp.
Отправлено: merke от Август 21, 2010, 20:46
например вот: заточи под кути /^([a-z,0-9,_,\-,\.])+\@([a-z,0-9,_,\-])+(\.([a-z,0-9])+)+$/


Название: Re: Регулярка для QRegExp.
Отправлено: merke от Август 21, 2010, 20:48
вот ещё ^[0-9a-z][.\-\w]*@(?:[0-9a-z][\-0-9a-z]*[0-9a-z]\.)+[a-z]{2,6}$


Название: Re: Регулярка для QRegExp.
Отправлено: merke от Август 21, 2010, 20:49
Вот заточка на кутях QRegExp re("^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$")


Название: Re: Регулярка для QRegExp.
Отправлено: setjmp от Август 21, 2010, 20:52
Вот нарыл. Дам пример с кодом:
Код:
QStringList Core::GetMail(QString from2)
{
    QRegExp rx2("[a-zA-Z]{1}[a-zA-Z\\d\\u002E\\u005F]+@([a-zA-Z]+\\u002E){1,2}((net)|(com)|(org))");
    rx2.setMinimal(true);
    QStringList list2;
    int pos2 = 0;
    while ((pos2 = rx2.indexIn(from2, pos2)) != -1)
        {
                list2 << rx2.cap(1);
                pos2 += rx2.matchedLength();
        }

return list2;
}

Код:
QString buff2 = "Моё мыло hrom@xakep.ru";
    QStringList mail = core.GetMail(buff2);
    ui->listWidget->addItems(mail);
Возможно проблема не в регулярки?


Название: Re: Регулярка для QRegExp.
Отправлено: zenden от Август 22, 2010, 12:03
Кто-нибудь знает, собирается ли Nokia сделать нормальный Regexp
Я имею ввиду совместимый с общепризнанным стандартом PCRE ?


Название: Re: Регулярка для QRegExp.
Отправлено: Авварон от Август 22, 2010, 12:13
Цитировать
QRegExp is modeled on Perl's regexp language.
Вам что-то не нравится? В любом случае, где бы мне не приходилось юзать регулярки, они были свои


Название: Re: Регулярка для QRegExp.
Отправлено: zenden от Август 22, 2010, 14:03
Не устраивает хотя бы тем, что не поддерживает символ '?' для обозначения ленивых квантификаторов
и из-за этого теряется совместимость даже с простейшими регулярками.


Название: Re: Регулярка для QRegExp.
Отправлено: crossly от Август 22, 2010, 14:07
Цитировать
Не устраивает хотя бы тем, что не поддерживает символ '?' для обозначения ленивых квантификаторов
перед тем как распалятся нужно внимательно читать документацию.... setMinimal(bool)


Название: Re: Регулярка для QRegExp.
Отправлено: zenden от Август 22, 2010, 14:12
Цитировать
Не устраивает хотя бы тем, что не поддерживает символ '?' для обозначения ленивых квантификаторов
перед тем как распалятся нужно внимательно читать документацию.... setMinimal(bool)

Я внимательно читаю документацию, и про эту функцию знаю, но она не является эквивалентом символа '?' и не делает выражения совместимыми. Она устанавливает нежадность для всего выражения, а  '?' только для одного квантификатора.