我想匹配模式的表达式
一个空格后跟一个(加法运算符或减法运算符)
例如:
" +"
应该返回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;
}
答案 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实现,这有时是一个有点乏味的库。