2013-07-31 27 views
3

我有一個(假設正確)正則表達式表達式R.我想測試正則表達式是否只是一個匹配(所有字母,數字和轉義的表達式),或者可以與其他任何東西交換。此功能,「HasWildCards」,將這樣的工作:元正則表達式:測試正則表達式是否只是一個字符串(沒有正則表達式「通配符」)

bool a = HasWildCards("asdf");//returns false 
bool b = HasWildCards("asdf*");//returns true 
bool c = HasWildCards("asdf[123]");//returns true 
bool d = HasWildCards("asdf\\[123\\]");//returns false 

我使用boost ::正則表達式,如果這有助於在所有。我想檢查,如果正則表達式匹配的是這樣的:

(^(([\[\^\$\.\|\?\*\+\(\{\}])))?(\\[QEdwsDWSbAZzB])?([^\\][\[\^\$\.\|\?\*\+\(\)\{\}])? 

我測試過這對一些表達式(使用grepWin的RegexTest工具)

所以非轉義正則表達式符號開始,非轉義標誌,非轉義正則表達式在體內。有其他選擇嗎?我搞砸了嗎?有沒有更好的辦法?

+0

你試過了嗎? –

+0

'「[^ \\\\] [\\。\\^\\ $ \\ [\\] \\?\\ + \\ * \\ {\\}]」'如果沒有特殊字符在它之前逃跑,你可能需要擴展第二個字符類以包含我錯過了我頭頂的其他特殊字符。所有反斜槓都會被加倍,以便逃入字符串中。 – 2013-07-31 19:23:35

+0

@DrewMcGowen在一些表達式是的,每當我打破它,我必須編輯正則表達式... – IdeaHat

回答

0

好吧,有一個快速的兩步法來測試這個。 而不是在一個正則表達式中測試轉義字符通配符,函數的第一行可以刪除轉義字符,然後第二行將測試通配符類型表達式的剩餘字符串。

.*((\[.+?\])|(\{[0-9]*,[0-9]*\})|(\*)|(\+)).* 

將匹配包含任何*,+,{#,#}或[]表達式的字符串。在你的函數中,返回傳遞的字符串是否與這個表達式匹配。