2013-01-17 83 views
0

我正在嘗試學習RegEx。我一直負責從幾百個* .png文件中生成一個QPixmap。理想情況下,它將是一個PixMap矩陣。QRegEx幫助,一般RegEx

我認爲QRegEx是執行此操作的最佳方式,因此我可以將像素映射插入到矩陣中,而無需排序。

我的模式我想匹配:

runner_(int)_(int).png 

當第一個整數有一定的限度[-1,13]和第二[00,20]。第二個整數有一個前導零。

這是我的代碼的嘗試:

// find the png files in the thing 
    QDir fileDir(iconPath);   
    QFileInfoList fileList = fileDir.entryInfoList(); 

    QRegExp rxlen("runner_([^\\_]{1,1}])_([^\\_]{1,1}]).png");   
    foreach (const QFileInfo &info, fileList) { 
     qDebug() << info.fileName(); 
     int pos = rxlen.indexIn(info.fileName()); 
     if (pos > 1) { 
      qDebug() << rxlen.cap(1); 
      qDebug() << rxlen.cap(2); 
     } else { 
      qDebug() << "Didn't find any"; 
     } 
    } 

我的問題:請用正則表達式表達幫助。

請溫柔,我是新來的正則表達式(前開始學習它大約一個小時!)

謝謝:)

+0

有在該職位沒有真正的問題... –

+0

你怎麼知道?很明顯,我需要RegEx表達式的幫助,否則它不會被標記爲這樣。 –

+0

如何添加「什麼是最好的正則表達式在這種情況下使用」或什麼的。我正在閱讀它,不得不猜測你真正想要的是什麼......幫助代碼?幫助正則表達式?你沒有告訴你是否嘗試過你所寫的,它沒有或沒有工作。 IE瀏覽器,你不能通過閱讀它來了解問題所在。 –

回答

1

{1,1}是絕對沒用,意味着東西是介於1分1次使用,即一次。你可以在字符串中寫入元素。

既然你已經有你的格局下所有好的和正確的,你可以從它建立的正則表達式直:

runner_(-1|[0-9]|0+[0-9]|0*1[0123])_([0-9]|0+[0-9]|0*1[0-9]|20)\.png 

基本上只是寫模式在你的範圍內的所有號碼。

編輯爲逃避點。 再次編輯以允許前導零。

+0

順便說一句,你是相當接近,如果你沒有真正關心的是,他們都是整數,以及它們的範圍是否沒有關係,如果你更換'{1,1}'在您的文章有'+'它將工作(它只是吐出了大量的誤報太)。 – Blindy

+0

我無法使它匹配。我複製並將你的答案粘貼到我的QRegExp中,沒有匹配。 也許這是我的索引?第二個整數爲[00,20]沒有[0,20] –

+0

其實Blindy,這個工作,但我不得不脫下「runner_」和「巴紐」位。我接受這個。感謝您的幫助。 –