2015-02-09 102 views
1

我有以下代碼:C++正則表達式不工作w/PCRE表達?

include <regex> 
    include <string> 
    TCHAR basePath[MAX_PATH]; 
    GetCurrentDirectory(MAX_PATH, basePath); 

    wstring test(&basePath[0]); //convert to wstring 
    string test2(test.begin(), test.end()); //and convert to string. 

    std::regex rBase("(.*my-dir)"); 
    std::smatch sm; 
    std::regex_match(test2, sm, rBase); 

然而,SM總是返回空

基本上,如果我有以下目錄結構:

E:\foo\bar\baz\my-dir\post1\dir2 

我需要返回

"E:\foo\bar\baz\my-dir" 

正則表達式似乎工作,如果我運行它雖然說,pytho n或javascript,但在C++中不在此處

我在想什麼或者有什麼替代方法?

感謝

+2

您似乎混淆了PCRE正則表達式庫和C++ 11標準的庫。內置的C++ 11正則表達式僅適用於更新的編譯器。 PCRE不是C++標準的一部分,因此您需要單獨添加PCRE庫。 – Galik 2015-02-09 20:09:17

回答

1

std::regex_match檢查整個字符串是否正則表達式,而不只是它的任何部分匹配。

使用std::regex_search代替std::regex_match或使用整個字符串相匹配的正則表達式,如"(.*my-dir).*",並提取與sm[1].str()的子匹配。