C ++正则表达式匹配'+'量词

时间:2011-11-24 22:04:11

标签: c++ regex c++11

我想匹配模式的表达式

一个空格后跟一个(加法运算符或减法运算符)

例如: " +"应该返回True

我在以下常规exp中尝试过使用std::regex_match

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

但他们都返回假。

正确的表达方式应该是什么?

修改

这是测试代码:

#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;
}

5 个答案:

答案 0 :(得分:3)

现在您已发布代码,我们可以看到问题所在:

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

问题出在这里,operator >>在读取时跳过空白,所以如果你输入空格加,cin会跳过这个空格,然后你的正则表达式将不再匹配。

要使此程序正常工作,请使用std::getline来读取用户按下Enter键之前输入的所有内容(包括空格):

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

答案 1 :(得分:1)

试试这个,它将字符串与空格后跟一个+或 - 匹配。

" (\\+|-)"

答案 2 :(得分:1)

通常首先需要减号:[-abc]。这是因为不要与范围[a-b]混合。

答案 3 :(得分:0)

你可以尝试,因为我认为它应该可行,但我还没有测试过:" [\+-]"

答案 4 :(得分:-2)

看起来vc2010 / C ++ 11包含了 boost 库。

http://www.boost.org/doc/libs/1_39_0/libs/regex/doc/html/boost_regex/ref/regex_match.html
修改
或者,对于那些对这个版本的lib有问题的人,他们可以使用这个:
http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/ref/regex_match.html
与其他

完全相同的内容

文件:

* regex_match *

请注意,仅当表达式与整个输入序列匹配时,结果才为真。 如果要在序列中的某处搜索表达式,请使用* regex_search *

所以,看起来".* [+-].*"应该告诉你字符串中是否有空格后跟+ - 符号。

但是,不确定Boost的MS实现,这有时是一个有点乏味的库。