2012-07-02 38 views
0

我想在C++中使用正則表達式匹配文件名。所需文件名的格式爲 「ProjectXX.txt」,其中X應爲數字。與我使用正則表達式的代碼如下:在C++中使用正則表達式匹配文件名

static const wregex initFile(L"(\\Project)(\\d\\d)\\.(\\txt)"); 
wsmatch result; 
if(regex_match(fileName, result, initFile)) 

我需要CString(因此L""),因爲我使用WINDOWS.H。然而,代碼拋出一個異常,雖然我試圖修改正則表達式,但我無法管理它以匹配文件名。什麼是正確的正則表達式?

+2

'L「Project [0-9] {2} .txt」'我想。 – hmjd

+0

拋出哪個異常? – MSalters

回答

0

@ hmjd的評論幾乎是正確的,但有點太寬。它也將接受L"Project[0-9]{2}@txt"。你想L"Project[0-9]{2}\\.txt"

+0

''[0-9] {2}「與」\\ d \\ d「'有什麼不同? (大概也是,他需要用圓括號創建捕獲。) –

+0

@JamesKanze:個人喜好,當C++正則表達式合理時,我避免使用'\'。它可能很快變得不可讀。 – MSalters

+0

我可以理解。 (當然,如果你在標準C++中有'regex',你也有原始字符串:-)。但是用boost :: regex ...)但是在這種情況下,他已經使用了'\\ d',並且他的正則表達式在這方面是正確的。我至少會提到他的正則表達式不正確的原因。 –

0

\\Pt前面的目的是什麼?第一個將 可能會導致錯誤,因爲正則表達式沒有轉義 序列\P。刪除那些(`L「(Project)(\ d \ d)\。(txt)」),它應該工作。

而我在這裏:爲什麼捕獲必須是常量的字符串。 我會寫這L"Project(\\d\\d)\\.text",並與它做,只是 使用L"Project"L"txt",而不是第一個和第三個 捕獲。