2011-11-24 171 views
2

我要匹配的圖案的表達C++正則表達式匹配「+」量詞

的空間,隨後通過(加法運算或減法運算符)

例如: " +"應返回True

我曾嘗試使用std::regex_match以下常規EXP的:

" [+-]""\\s[+-]""\\s[+\\-]","\\s[\\+-]"

但他們都返回false。

什麼應該是正確的表達?

編輯

下面是測試代碼:

#include<iostream> 
#include<string> 
#include<regex> 

using std::cout; 
int main() 
{ 
    std::string input; 
    std::cin>>input; 
    const std::regex ex(" [\\+-]"); 
    std::smatch m; 
    if(std::regex_match(input,ex)) 
    { 
     cout<<"\nTrue"; 
    } 
    else 
     cout<<"\nFalse"; 
    return 0; 
} 
+0

您使用regex_match,或regex_search? –

+0

正如我所提到的。這是'regex_match' – vivek

+1

對不起,我的錯誤。所以你匹配的字符串只能是「+」或「 - 」?由於regex_match不在字符串中搜索,因此只能檢查整個字符串是否與指定的正則表達式匹配。如果你想匹配一個字符串的一部分,使用regex_search –

回答

3

現在你已經發布的代碼,我們可以看到的問題是什麼:

std::string input; 
std::cin >> input; 

的問題是在這裏,operator >>跳過空白時,它讀取,因此,如果您鍵入空間,加上,CIN將跳過空間,然後你的正則表達式將不再匹配。

爲了得到這個程序協同工作,使用std::getline,而不是閱讀,這是按用戶之前輸入的一切輸入(包括空格):

std::string input; 
std::getline(std::cin, input); 
0

你可以嘗試,因爲我認爲它應該工作,但我還沒有測試它尚未:" [\+-]"

1

試試這個,它匹配字符串和空格後跟一個+或 - 。

" (\\+|-)" 
+0

我在VS2010中試過,但沒有奏效。你做過了嗎? – vivek

+0

正則表達式是正確的,但從這裏檢查是否正確使用匹配器:http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15339 –

1

通常需要先減號:[-abc]。這是因爲不要與範圍[a-b]混合。

+1

它也可以走到最後。 – SoapBox

-2

它看起來像vc2010/C++ 11合併了boost庫。

http://www.boost.org/doc/libs/1_39_0/libs/regex/doc/html/boost_regex/ref/regex_match.html
編輯
或者,對於那些誰擁有這個版本的庫的問題,他們可以用這一個:
http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/ref/regex_match.html
這是完全相同的內容作爲另一個

文檔:

* regex_match *

請注意,只有當表達式匹配整個輸入序列時,結果才爲真。 如果你想序列內的某處搜索的表達式,然後使用* regex_search *

所以,它看起來像".* [+-].*"應該告訴你,如果有一個空格,後面跟着一個+ - 號某處的字符串中。

但是,不確定MS的實施Boost,這是一個有點乏味的庫有時使用。

+0

@TamásSzelei - Boost有一大套模塊,正則表達式就是其中之一。今年早些時候我已經使用了1.39。如果他們即使有一點改變正則表達式,我也會感到震驚。顯然,他們沒有改變'regex_match'的文檔,它完全一樣。在我的回答中沒有任何內容是不真實的。請不要盲目地冒犯,它不是個人的。 – sln

+0

我很抱歉你在我的批評中冒犯了我,也許我可以更恰當地措辭。 –