2016-07-08 34 views
-1

我在QT和C++上工作。作爲測試項目的一部分,我需要從複雜和長字符串中獲取子字符串,基本上它是網頁的源。如果我的問題看起來很瑣碎,那將是因爲我是一個天真的qt程序員,並且對正則表達式的經驗不足。如何使用qt獲取複雜的子字符串?

字符串: 「url_encoded_fmt_stream_map」:「類型=視頻%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%(252C) 9438326%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%3DO-AMB0Fggb71vKhXSdQqcOPdLeb9v0n2GaibsWg_W5L5b7%26毫米%3D31%26mn%3Dsn-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%3Dvideo%252Fmp4%26key%3Dyt6%26initcwndbps%3D386250% 26pcm2cms%3Dyes%26requiressl%3Dyes%26signature%3D4C90C634F68098572BDCA7D5B7946F8A49A17369.D4AB7172922F499596226BA335BDF0B4519A4AC6%26ratebypass%3Dyes%26fexp%3D33001 19%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%3DO-AMB0Fggb71vKhXSdQqcOPdLeb9v0n2GaibsWg_W5L5b7%26毫米%3D31%26mn%3Dsn-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 \ u0026quality = small \ u0026itag = 36 \ u0026url =

上面的字符串是我的完整字符串和類似模式的重要組成部分。這個網頁來源有許多編碼的網址,我需要分開。下面是我想要分開的東西。

SUBSTRING:

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%252C94406 51%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%3DO-AMB0Fggb71vKhXSdQqcOPdLeb9v0n2GaibsWg_W5L5b7%26毫米%3D31%26mn%3Dsn-ci5gup-qxaz%26upn%3Dfri9F8GP9uA%26source%3Dyoutube%26itag%3D43%26pl%3D20%26lmt%3D1445550849945309%26expire%3D1467922869%26sver%3D3%26ipbits% 3D0%26dur%3D0.000,type = video%2Fmp4%3B + codecs%3D%22avc1.42001E%2C + mp4a.40.2%22

請幫助並建議如何使用QT,C++,常用表達。我不希望使用任何其他編程語言。 謝謝&此致敬禮。

回答

0

在Qt中有用於處理字符串的類QString。您應該學習QString文檔部分:Manipulating String DataQuerying String Data。也許,contains()方法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。當然,您可以在bigString中確定subString的索引。 你可以把你自己的數據放在bigStringsubString

+0

嗨基里爾,你能幫我解決這個問題。實際上這個字符串的大部分都是可變的。我只確定子串的開始和開始。 – Noddy

+0

我用小例子更新答案。 –