regex_match提供意外结果

熔化

我试图编写一个递归下降解析器,并试图在用户输入的字符串中搜索匹配的正则表达式。我正在尝试执行以下操作,以尝试理解<regex>C ++ 11提供库,但是得到了意外的结果。

std::string expression = "2+2+2";
std::regex re("[-+*/()]");  
std::smatch m;

std::cout << "My expression is " << expression << std::endl;

if(std::regex_search(expression, re)) {
    std::cout << "Found a match!" << std::endl;
}

std::regex_match(expression, m, re);

std::cout << "matches:" << std::endl;
for (auto it = m.begin(); it!=m.end(); ++it) {
    std::cout << *it << std::endl;
}

因此,根据我的正则表达式,我希望它可以输出

Found a match!
matches:
+
+

但是,我得到的输出是:

My expression is 2+2+2
Found a match!
matches:

我觉得自己犯了一个愚蠢的错误,但是我似乎无法弄清楚为什么输出之间会有差异。

谢谢,erip

熔化

我找到了regex_iterator,它解决了问题。这是工作代码:

std::regex re("[-+*/()]");  
std::smatch m;

std::cout << "My expression is " << expression << std::endl;

if(std::regex_search(expression, re)) {
    std::cout << "Found a match!" << std::endl;
}

try {
    std::sregex_iterator next(expression.begin(), expression.end(), re);
    std::sregex_iterator end;
    while (next != end) {
        std::smatch match = *next;
        std::cout << match.str() << "\n";
        next++;
    } 
} catch (std::regex_error& e) {
    // Syntax error in the regular expression
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: regex_match与字符éèà

来自分类Dev

C ++ regex_match行为

来自分类Dev

Codeigniter regex_match与比较

来自分类Dev

C ++无法使regex_match正常工作

来自分类Dev

C ++ boost :: regex_match奇怪的行为

来自分类Dev

C ++ regex_match不起作用

来自分类Dev

Regex_match在文件中不匹配

来自分类Dev

C ++无法使regex_match正常工作

来自分类Dev

为什么regex_match是函数而不是类regex的方法?

来自分类Dev

Itertools Groupby提供了意外结果

来自分类Dev

Lodash isUndefined提供意外结果

来自分类Dev

为什么regex_match抛出“复杂性异常”?

来自分类Dev

VS 2012中的简单regex_match无法正常工作

来自分类Dev

regex_match()之后的多余空白行

来自分类Dev

VS2010的std :: regex_match问题

来自分类Dev

为什么regex_match抛出“复杂性异常”?

来自分类Dev

codeigniter regex_match匹配“两个长度值”

来自分类Dev

复杂的regex_match在C ++中不起作用

来自分类Dev

Layout_Weight提供意外结果

来自分类Dev

SpanNotQuery提供意外结果(排除将被忽略)

来自分类Dev

在libc ++上,为什么regex_match(“ tournament”,regex(“ tour | to | tournament”))失败?

来自分类Dev

std :: regex_match和std :: regex_search之间的区别?

来自分类Dev

在libc ++上,为什么regex_match(“ tournament”,regex(“ tour | to | tournament”))失败?

来自分类Dev

模式为“?:”的意外preg_match结果

来自分类Dev

Javascript regex 捕获给出意外结果

来自分类Dev

用std :: regex_match匹配一位数字

来自分类Dev

REGEX_MATCH匹配PG,而不匹配PG13,反之亦然

来自分类Dev

为什么C ++ regex_match函数要求在该函数之外定义搜索字符串?

来自分类Dev

regex_match可以访问和不访问已删除函数的案例

Related 相关文章

热门标签

归档