Russian Qt Forum
Ноябрь 24, 2024, 19:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Регулярное выражение  (Прочитано 5211 раз)
vohulg
Гость
« : Май 31, 2014, 09:56 »

Доброго времени. Не получается вытащить строку по регулярному выражению, не вижу ошибки. Подскажите может кто увидит.

Есть текст который получаю в формате QByteArray
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" id="jsHtml" lang="ru" class="page-scroll  jsHtml draganddrop jsHtml">
<head>

<title>јрхив Mail.Ru јгента</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link rel="stylesheet" type="text/css" href="/css/styles.css">

<script type="text/javascript">
window.AgentArchive = {
DEBUG: false,
historyEnabled: true,
hash: "3eb2a213676c5f80a91044d45be783c0",
contacts: {"success":true,"list":[{"name":"\u0422\u0435\u0441\u0442 \u0422\u0435\u0441\u0442\u043e\u0432","email":"testtestov101@mail.ru","text":"\u043e\u0432\u0430\u0442\u043e\u0432conv \u2014 \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443","inbox":false,"date":"28 \u0410\u043f\u0440 15:19","mid":"211783149443618077"},{"name":"tttttttttt ytyt","email":"night_post@mail.ru","text":"\u041f\u043e\u043b\u0443\u0447\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u0440\u0443\u0431\u0435\u0436\u043e\u043c \u0441 EF. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044b \u0438 \u0448\u043a\u043e\u043b\u044b \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443","inbox":true,"date":"2012, 10 \u041e\u043a\u0442 09:25","mid":"211733104484681302"}],"is_last":true,"is_messages":false,"message_ts":0} };
</script>

<script type="text/javascript" src="/js/script.js?4"></script>

<style>

html, body {
height: 100%;
}

#ScrollBody {
height: 100%;
overflow-y: scroll;
}

</style>

</head>
<body>
<div class="page-wrap" id="wrap">
<div id="agent-archive-wrap"></div>
</div>
</body>
</html>


Из него мне надо вытащить данные содержащие json
Код:
		{"success":true,"list":[{"name":"\u0422\u0435\u0441\u0442 \u0422\u0435\u0441\u0442\u043e\u0432","email":"testtestov101@mail.ru","text":"\u043e\u0432\u0430\u0442\u043e\u0432conv \u2014 \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443","inbox":false,"date":"28 \u0410\u043f\u0440 15:19","mid":"211783149443618077"},{"name":"tttttttttt ytyt","email":"night_post@mail.ru","text":"\u041f\u043e\u043b\u0443\u0447\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u0440\u0443\u0431\u0435\u0436\u043e\u043c \u0441 EF. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044b \u0438 \u0448\u043a\u043e\u043b\u044b \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443","inbox":true,"date":"2012, 10 \u041e\u043a\u0442 09:25","mid":"211733104484681302"}],"is_last":true,"is_messages":false,"message_ts":0}		};


Максимально приближенный к цели я смог достичь таким выражением:
Код:
QRegExp regexContactAgent("contacts: (.)+</script>");

По которому получаю
Код:
contacts: {"success":true,"list":[{"name":"\u0422\u0435\u0441\u0442 \u0422\u0435\u0441\u0442\u043e\u0432","email":"testtestov101@mail.ru","text":"\u043e\u0432\u0430\u0442\u043e\u0432conv \u2014 \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443","inbox":false,"date":"28 \u0410\u043f\u0440 15:19","mid":"211783149443618077"},{"name":"tttttttttt ytyt","email":"night_post@mail.ru","text":"\u041f\u043e\u043b\u0443\u0447\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u0440\u0443\u0431\u0435\u0436\u043e\u043c \u0441 EF. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044b \u0438 \u0448\u043a\u043e\u043b\u044b \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443","inbox":true,"date":"2012, 10 \u041e\u043a\u0442 09:25","mid":"211733104484681302"}],"is_last":true,"is_messages":false,"message_ts":0}		};
</script>

<script type="text/javascript" src="/js/script.js?4"></script>


Может кто знает как отбросить лишние символы вначале и в конце полученного текста ?


Еще я не понимаю почему не работает вот такое выражение:
Код:
QRegExp regexContactAgent("contacts: (.)+};);
которое означает что искомая строка начинается с текста "contacts: ", потом идут несколько любых символов, и заканчивается фигурной скобкой и точкой с запятой (};).

Вроде все логично, но у меня это выражение не срабатывает
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Май 31, 2014, 10:05 »

Попробуйте задать:
Код
C++ (Qt)
setMinimal(true)
 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Май 31, 2014, 13:03 »

к последнему: попробуй экранировать фигурную скобку \\}. и непонятно зачем скобки вокруг точки — тебе надо «захватить» фигурную скобку что ли?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Май 31, 2014, 22:46 »

Hrundel, ты написал какую-то ахинею. если не разбираешься и решил быстренько по табличке пройтись и ответить че-то, то не стоило.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #4 : Май 31, 2014, 23:14 »

Судя по его записи (.)+ означает, что он собирается прочесть как минимум одну точку типа String или char или серию точек "................."

Видимо в Баварском техническом университете на на факультете общей информатики забили на образование)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Hrundel
Гость
« Ответ #5 : Июнь 01, 2014, 05:08 »

Hrundel, ты написал какую-то ахинею. если не разбираешься и решил быстренько по табличке пройтись и ответить че-то, то не стоило.

Да, действительно, какая мне собственно разница?!
Записан
Bepec
Гость
« Ответ #6 : Июнь 01, 2014, 07:17 »

offtop: Печаль тоска.

По теме: выбрасывай нафиг QRegExp, бери deelx.h файлик и суй туда
Код:
(?<=contacts:) .*?(?=</script>)

Получишь
Код:
 {"success":true,"list":[{"name":"\u0422\u0435\u0441\u0442 \u0422\u0435\u0441\u0442\u043e\u0432","email":"testtestov101@mail.ru","text":"\u043e\u0432\u0430\u0442\u043e\u0432conv \u2014 \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443","inbox":false,"date":"28 \u0410\u043f\u0440 15:19","mid":"211783149443618077"},{"name":"tttttttttt ytyt","email":"night_post@mail.ru","text":"\u041f\u043e\u043b\u0443\u0447\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u0440\u0443\u0431\u0435\u0436\u043e\u043c \u0441 EF. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044b \u0438 \u0448\u043a\u043e\u043b\u044b \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443","inbox":true,"date":"2012, 10 \u041e\u043a\u0442 09:25","mid":"211733104484681302"}],"is_last":true,"is_messages":false,"message_ts":0}		};

PS deelx.h - это полноценный regExp в одном h файле, искать в гугле Веселый

PPS сразу чтоб не плутал -
Код:
		QString regExps(QString inString, QString inRegExp)
{
CRegexpT <char> regexp(inRegExp.toAscii(), IGNORECASE |  SINGLELINE);
MatchResult result = regexp.Match(inString.toAscii());


while( result.IsMatched() )
{
return inString.mid(result.GetStart(), result.GetEnd() - result.GetStart());
}
return "";
}
« Последнее редактирование: Июнь 01, 2014, 07:19 от Bepec » Записан
VPS
Гость
« Ответ #7 : Июнь 01, 2014, 11:45 »

Вот такое выражение должно работать:
Код:
QRegExp reg("contacts:\\s?(\\{.+\\})\\s*\\}");
« Последнее редактирование: Июнь 01, 2014, 11:54 от vps » Записан
Bepec
Гость
« Ответ #8 : Июнь 01, 2014, 14:00 »

Да, так тоже работает, выдаст
Код:
contacts: {"success":true,"list":[{"name":"\u0422\u0435\u0441\u0442 \u0422\u0435\u0441\u0442\u043e\u0432","email":"testtestov101@mail.ru","text":"\u043e\u0432\u0430\u0442\u043e\u0432conv \u2014 \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443","inbox":false,"date":"28 \u0410\u043f\u0440 15:19","mid":"211783149443618077"},{"name":"tttttttttt ytyt","email":"night_post@mail.ru","text":"\u041f\u043e\u043b\u0443\u0447\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u0440\u0443\u0431\u0435\u0436\u043e\u043c \u0441 EF. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044b \u0438 \u0448\u043a\u043e\u043b\u044b \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443","inbox":true,"date":"2012, 10 \u041e\u043a\u0442 09:25","mid":"211733104484681302"}],"is_last":true,"is_messages":false,"message_ts":0}		}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.234 секунд. Запросов: 23.