2013-08-23 15 views
0

我想用C++庫來使用正則表達式。用於接受「」的C++中的正則表達式

bool x = std::regex_match(cInputLayoutRec->InputString, std::regex("^[A-Z0-9-\'// ]*$")); 
在這種情況下

的結果應該是真實的(x)如果所提供的輸入是任何這些信 A到Z,0-9,\的,'AND/

及其對所有工作條件除\,即如果輸入字符串包含\,則結果爲false。 我試着把/ \來迎合這個特殊字符'\',即使它不工作。
任何人都可以建議一些輸入,如果我失去了一些東西?

在此先感謝!

回答

1

您在字符串中使用\,因此它將作爲一個字符串轉義序列處理(在你的情況下逃脫'

您需要使用\\\中的字符串。

由於反斜線也是正則表達式的轉義字符,你必須再次逃脫這個,所以使用\\\\來表示一個正則表達式的\字符。

+3

大概連\\\\'用C++' , 對? –

+0

@ m.buettner,對,謝謝 – thumbmunkeys

0

\字符用於幾乎無處不在逃脫。這個「無處不在」包括C++字符串文字語法正則表達式語法。在C++

你的正則表達式的定義應該是:

std::regex("^[A-Z0-9-\\\\'// ]*$") 

這是發生了什麼:

  • C++解析器解釋字符串字面"^[A-Z0-9-\\\\'// ]*$"爲字符串,其內容如下:^[A-Z0-9-\\'// ]*$。這個字符串被傳遞給正則表達式解析器。請注意,兩個序列\\已被\「替換」。

  • 正則表達式解析器將\\序列解釋爲字符類中的文字\字符。

2

其他的答案是正確的,但由於您使用C++ 11應該注意的是,你還可以用raw string literals像這樣:

std::regex(R"(^[A-Z0-9-\\'// ]*$)")