2011-11-24 181 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

我很抱歉你在我的批评中冒犯了我,也许我可以更恰当地措辞。 –