Как получить сложную подстроку с помощью QT?
Я работаю над QT и C++. В рамках тестового проекта мне нужно извлечь подстроку из сложной и длинной строки, в основном это источник веб-страницы. Если мой вопрос выглядит очень тривиальным, то это потому, что я наивный программист на qt и у меня меньше опыта регулярных выражений.
Строка: "url_encoded_fmt_stream_map": "type = video% 2Fwebm% 3B + кодеки%3D%22vp8.0%2C+vorbis%22\u0026quality= средний \ u0026itag = 43 \ u0026url = https% 3A% 2F% 2Fr2 --- sn -ci5gup-qxaz.googlevideo.com% 2Fvideoplayback% 3Fmime% 3Dvideo% 252Fwebm% 26key% 3Dyt6% 26initcwndbps% 3D386250% 26pcm2cms% 3Dyes% 26requiressl% 3Dyes% 26signature% 3D05FB41F2F9FF5490841C7B9F40748FC4B8F505A3.0D81AB0745519F179CBF4468D2412C2240DC72F0% 26ratebypass% 3Dyes% 26fexp% 3D3300119% 252C3300131% 252C3313268 % 252C9405961% 252C9416126% 252C9416891% 252C9419451% 252C9422342% 252C9422596% 252C9427790% 252C9428398% 252C9431012% 252C9433096% 252C9433380% 252C9433855% 252C9433946% 252C9434332% 252C9435526% 252C9435667% 252C9435876% 252C9436270% 252C9436607% 252C9436834% 252C9436872% 252C9436973% 252C9437066% 252C9437553% 252C9437742 % 252C9438326% 252C9439652% 252C9439979% 252C9440048% 252C9440552% 252C9440651% 26ms% 3Dau% 26mt% 3D1467900993% 26sparams% 3Ddur% 252Cid% 252Cinitcwndbps% 252Cip% 252Cipbits% 252Citag% 252Clmt% 252Cmime% 252Cmm% 252Cmn% 252Cms% 252Cmv% 252Cpcm2cms% 252Cpl % 252Cratebypass% 252Cre quiressl% 252Csource% 252Cupn% 252Cexpire% 26mv% 3DM%26ip%3D182.68.203.45%26id%3Не-AMB0Fggb71vKhXSdQqcOPdLeb9v0n2GaibsWg_W5L5b7%26мм% 3D31% 3Dsn% 26 млн-ci5gup-qxaz%26upn%3Dfri9F8GP9uA%26source%3Dyoutube%26itag%3D43%26pl%3D20%26lmt%3D1445550849945309%26expire%3D1467922869%26sver%3D3%26ipbits%3D0%26dur%3D0.000, тип = видео%2Fmp4%3B+ кодеки%3D%22avc1.42001E%2C+mp4a.40.2%22 \ u0026quality = medium \ u0026itag = 18 \ u0026url = https% 3A% 2F% 2Fr2 --- sn-ci5gup-qxaz.googlevideo.com% 2Fvideoplayback% 3Fmime% 3D видео%252Fmp4%26key%3Dyt6%26initcwndbps%3Dcm2msmsmsmsmsmsmsms505050 26requiressl% 3Dyes% 26signature% 3D4C90C634F68098572BDCA7D5B7946F8A49A17369.D4AB7172922F499596226BA335BDF0B4519A4AC6% 26ratebypass% 3Dyes% 26fexp% 3D3300119% 252C3300131% 252C3313268% 252C9405961% 252C9416126% 252C9416891% 252C9419451% 252C9422342% 252C9422596% 252C9427790% 252C9428398% 252C9431012% 252C9433096% 252C9433380% 252C9433855% 252C9433946% 252C9434332% 252C9435526% 252C9435667% 252C9435876% 252C9436270% 252C9436607% 252C9436834% 252C9436872% 252C9436973% 252C9437066% 252C 9437553% 252C9437742% 252C9438326% 252C9439652% 252C9439979% 252C9440048% 252C9440552% 252C9440651% 26ms% 3Dau% 26mt% 3D1467900993% 26sparams% 3Ddur% 252Cid% 252Cinitcwndbps% 252Cip% 252Cipbits% 252Citag% 252Clmt% 252Cmime% 252Cmm% 252Cmn% 252Cms% 252Cmv% 252Cpcm2cms% 252Cpl% 252Cratebypass% 252Crequiressl% 252Csource% 252Cupn% 252Cexpire% 26mv% 3DM%26ip%3D182.68.203.45%26id%3Не-AMB0Fggb71vKhXSdQqcOPdLeb9v0n2GaibsWg_W5L5b7%26мм% 3D31% 3Dsn% 26 млн-ci5gup-qxaz%26upn%3Dfri9F8GP9uA%26source%3Dyoutube%26itag%3D18%26pl%3D20%26lmt%3D1465194153116908%26expire%3D1467922869%26sver%3D3%26ipbits%3D0%26dur%3D207.354, тип = видео%2F3gpp%3B+ кодеки%3D%22mp4v.20.3%2C+mp4a.40.2%22 качество = маленький =36 =36 =
Над строкой большая часть моей полной строки и похожий шаблон. Этот источник веб-страницы имеет много закодированных URL-адресов, которые мне нужно разделить. ниже то, что я пытаюсь отделить.
подстрока:
HTTPS%3A%2F%2Fr2---sn-ci5gup-qxaz.googlevideo.com%2Fvideoplayback%3Fmime%3Dvideo%252Fwebm%26key%3Dyt6%26initcwndbps%3D386250%26pcm2cms%3Dyes%26requiressl%3Dyes%26signature%3D05FB41F2F9FF5490841C7B9F40748FC4B8F505A3.0D81AB0745519F179CBF4468D2412C2240DC72F0%26ratebypass%3Dyes%26fexp%3D3300119%252C3300131%252C3313268%252C9405961%252C9416126%252C9416891%252C9419451%252C9422342%252C9422596%252C9427790%252C9428398%252C9431012%252C9433096%252C9433380%252C9433855%252C9433946%252C9434332%252C9435526%252C9435667%252C9435876%252C9436270%252C9436607%252C9436834%252C9436872%252C9436973%252C9437066%252C9437553%252C9437742%252C9438326%252C9439652%252C9439979%252C9440048%252C9440552%252C9440651%26ms%3Dau%26mt%3D1467900993%26sparams%3Ddur%252Cid%252Cinitcwndbps%252Cip%252Cipbits%252Citag%252Clmt%252Cmime%252Cmm%252Cmn%252Cms%252Cmv%252Cpcm2cms%252Cpl%252Cratebypass%252Crequiressl%252Csource%252Cupn%252Cexpire%26mv%3DM%26ip%3D182.68.203.45%26id%3Не-AMB0Fggb71vKhXSdQqcOPdLeb9v0n2GaibsWg_W5L5b7%26мм% 3D31% % 3Dsn 26 млн-ci5gup-qxaz%26upn%3Dfri9F8GP9uA%26source%3Dyoutube%26itag%3D43%26pl%3D20%26lmt%3D1445550849945309%26expire%3D1467922869%26sver%3D3%26ipbits%3D0%26dur%3D0.000, тип = видео%2Fmp4%3B+ кодеки%3D%22avc1.42001E%2C+mp4a.40.2%22
Пожалуйста, помогите и предложите, как я могу сделать это, используя QT, C++, регулярные выражения. Я не хочу использовать любой другой язык программирования. С уважением.
1 ответ
В Qt есть класс QString для работы со строками. Ты должен учиться QString
разделы документации: Manipulating String Data
а также Querying String Data
, Может быть, содержит () метод QString
Класс достаточно для решения вашей проблемы.
UPD:
Простой пример с манипулированием подстрокой:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString bigString = "BigString BigString SubString BigString";
QString subString = "SubString";
bool containsFlag = bigString.contains(subString, Qt::CaseSensitive);
int index = bigString.indexOf(subString, 0, Qt::CaseSensitive);
qDebug() << "Length of subString: " << subString.length();
qDebug() << "SubString contains in bigString: " << containsFlag;
qDebug() << "SubString index in bigString: " << index;
return a.exec();
}
Как видите, вы можете определить, subString
содержится в bigString
, Конечно, вы можете определить индекс subString
в bigString
, Вы можете поместить свои собственные данные в bigString
а также subString
,