2011-11-20 130 views
0

我需要創建一個匹配2個字符的正則表達式:&|如何在C++中使用boost來創建正則表達式?

的代碼行是這樣的:

boost::regex EXPR("[0-9][0-9][A-Za-z]") ; 

如果鍵入任何串,便見如果上面列出的字符被包含在其中。 怎麼可能做到這一點?

+1

Uuuuhm,對不起?我沒有明白。 –

+0

如果字符串「asd」不匹配。 如果字符串是「aaa&sss」匹配。 如果字符串是「asss | sss」匹配。 如果字符串是「asss&sfs | ssf」匹配。 – user1056635

+0

因此,用一些字母,後面跟着至少一個'&'或'|',後面跟着更多的字母或'&'或'|'? – MSalters

回答

4

我不會寫一個正則表達式來匹配字符&|

我會用std::string::find - http://www.cplusplus.com/reference/string/string/find/

+0

謝謝! 工作。 – user1056635

+1

如果你正在尋找對於兩個字符中的任何一個,使用'find_first_of'。 – MSalters

+0

@ MSalters:是的,當我查看'find'時,我認爲'char *'重載會這樣做,但現在我再看一遍'find_first_of' –

1

根據我的語法解釋: [0-9A-Za-z]*[|&][0-9A-Za-z|&]*

0

這應該工作:".*?\Q|\E.*"。請注意,你需要加倍反引號,所以它是:

string yourCharacter("|"); // or "&" 
string rex(".*?\\Q"+yourCharacter+"\\E.*"); 

這是一個在線工具來測試正則表達式(前,通過此正則表達式匹配後的所有字符):http://gskinner.com/RegExr/

+0

Boost正則表達式默認爲Perl語法,它具有'\ Q ... \ E',但您不需要在類中轉義字符,這是您在此需要的(兩個可能的字符之一)。 – MSalters