C ++ regex_match不起作用

mlgpro

这是我的代码的一部分

bool CSettings::bParseLine ( const char* input )
{
    //_asm INT 3


    std::string line ( input );
    std::size_t position = std::string::npos, comment;

    regex cvarPattern ( "\\.([a-zA-Z_]+)" );
    regex parentPattern ( "^([a-zA-Z0-9_]+)\\." );
    regex cvarValue ( "\\.[a-zA-Z0-9_]+[ ]*=[ ]*(\\d+\\.*\\d*)" );
    std::cmatch matchedParent, matchedCvar;


    if ( line.empty ( ) )
        return false;

    if ( !std::regex_match ( line.c_str ( ), matchedParent, parentPattern ) )
        return false;

    if ( !std::regex_match ( line.c_str ( ), matchedCvar, cvarPattern ) )
        return false;
...
}

我尝试将其从文件中读取的行分隔开-行看起来像:

foo.bar = 15
baz.asd = 13
ddd.dgh = 66

并且我想从中提取部分-例如对于第一行foo.bar = 15,我想得到类似以下内容:

a = foo
b = bar
c = 15

但是现在,正则表达式总是返回false,我在许多在线正则表达式检查器上甚至在Visual Studio中都对其进行了测试,而且效果很好,我是否需要一些不同的C ++ regex_match语法?我正在使用Visual Studio 2013社区

加利克

问题是std :: regex_match必须与整个字符串匹配,但是您尝试仅匹配其中的一部分。

您需要使用std :: regex_search或更改您的正则表达式以一次匹配所有三个部分:

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

const auto test =
{
      "foo.bar = 15"
    , "baz.asd = 13"
    , "ddd.dgh = 66"
};

int main()
{
    const std::regex r(R"~(([^.]+)\.([^\s]+)[^0-9]+(\d+))~");
    //                     (  1  )  (   2  )       ( 3 ) <- capture groups

    std::cmatch m;

    for(const auto& line: test)
    {
        if(std::regex_match(line, m, r))
        {
            // m.str(0) is the entire matched string
            // m.str(1) is the 1st capture group
            // etc...
            std::cout << "a = " << m.str(1) << '\n';
            std::cout << "b = " << m.str(2) << '\n';
            std::cout << "c = " << m.str(3) << '\n';
            std::cout << '\n';
        }
    }
}

正则表达式:https//regex101.com/r/kB2cX3/2

输出:

a = foo
b = bar
c = 15

a = baz
b = asd
c = 13

a = ddd
b = dgh
c = 66

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

C ++ regex_match行为

来自分类Dev

C ++无法使regex_match正常工作

来自分类Dev

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

来自分类Dev

C ++无法使regex_match正常工作

来自分类Dev

标记<c:if>不起作用

来自分类Dev

C ++ ShellExecute不起作用

来自分类Dev

ShellExecute不起作用C ++

来自分类Dev

memset不起作用(C)

来自分类Dev

标记<c:if>不起作用

来自分类Dev

C程序不起作用

来自分类Dev

C - 除法不起作用

来自分类Dev

C / C ++结构打包不起作用

来自分类Dev

C / C ++结构打包不起作用

来自分类Dev

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

来自分类Dev

在C ++中将PUNICODE_STRING与regex_match一起使用

来自分类Dev

在C ++代码中使用regex和sed命令替换'*'指针不起作用

来自分类Dev

C ++单独的“ if”语句不起作用,但嵌套的“ if”语句却起作用

来自分类Dev

C ++ SQLExecDirect INSERT不起作用

来自分类Dev

开关-默认在C中不起作用

来自分类Dev

C ++ Ostream重载不起作用

来自分类Dev

目标-C调用变量不起作用

来自分类Dev

C ++,继承的复制ctor不起作用?

来自分类Dev

C ++ #if #elif #endif似乎不起作用

来自分类Dev

从python调用c函数不起作用

来自分类Dev

C#货币格式不起作用

来自分类Dev

mkdir函数在C中不起作用

来自分类Dev

DES加密不起作用C#

来自分类Dev

C ++开始和结束不起作用