2016-02-12 46 views
2

我需要支持多行的模式。該模式取自用戶,他們能夠將多行字符串包含爲正則表達式模式。C++中的多行正則表達式模式

例如:

std::regex re("^"+CWD+"("+path_delim+"[\\s\\S]*|$)"); 
if(std::regex_search(file,re)){ 
    //do something 
} 

CWD的變量可以是多行字符串。

P.S:如果我可以只用std::regex來處理這個問題,那就好了,即如果它不是輕量級的,我不想使用任何庫。此外,它需要是c++11

+2

當你說'CWD'是一個*多行字符串*你是什麼意思?它需要使用正則表達式語法。 – Galik

+0

你希望'^'和'$'匹配*行*的末尾還是字符串的末尾? – Will

+0

@將結束字符串。 – Jahid

回答

0

似乎多線正則表達式模式已經被支持。我只需要在將變量傳遞給正則表達式構造函數之前對變量進行清理。這是我使用的消毒字符串構造有效的正則表達式的代碼:

String sanitizeRegexString(const String& s){ 
    std::regex re(R"([\s\S])"); 
    return std::regex_replace (s,re,"[$&]",std::regex_constants::format_default); 
} 

上述功能將一個字符串與[]因此字符串不被解釋爲一個正則表達式迴繞到它的所有字符,而它被視爲模式內部的固定字符串,而與其連接的其他字符串(沒有消毒)充當正則表達式模式。