2015-04-06 84 views
1

我想在C++ 11(Visual Studio中2013)使用std::regex_replace,但我想創建正則表達式時拋出異常:爲什麼這個正則表達式會拋出異常?

Microsoft C++ exception: std::regex_error at memory location 0x0030ED34 

爲什麼會出現這種情況?這是我的定義:

std::string regexStr = R"(\([A - Za - z] | [0 - 9])[0 - 9]{2})"; 

std::regex rg(regexStr); <-- This is where the exception thrown 

line = std::regex_replace(line, rg, this->protyp->getUTF8Character("$&")); 

我想要做什麼:找哪家有以下幾種格式的字符串中的所有匹配:

「\ X99」或「\ 999」 其中X = AZ或az和9 = 0-9。

我也嘗試過使用boost正則表達式庫,但它也拋出了一個懷疑。

(另一個問題:我可以用我在最後一行是做反向引用我想根據比賽動態更換)

感謝所有幫助

+1

爲什麼你周圍的空間'-'在字符類的 價值? – Barmar

+3

您的正則表達式的問題是括號不平衡。其中一個開括號會被轉義,因此與右括號不匹配。 – Barmar

+0

@puelo'\\ [A-Za-z \ d] \ d {2} \ b' –

回答

1

按照上述意見,你需要修正你的正則表達式:匹配你需要使用的文字反斜槓"\\\\"(或R("\\"))。

我的代碼,顯示所有捕獲的第一組:

string line = "\\X99 \\999"; 
string regexStr = "(\\\\([A-Za-z]|[0-9])[0-9]{2})"; 
regex rg(regexStr); //<-- This is where the exception was thrown before 
smatch sm; 
while (regex_search(line, sm, rg)) { 
     std::cout << sm[1] << std::endl; 
     line = sm.suffix().str(); 
    } 

輸出:

\X99 
\999 

使用替換字符串裏面的方法調用至於,我不覺得這樣的功能regex_replace documentation

FMT - 正則表達式替換格式字符串,確切語法取決於標誌

相關問題