c++;11正则表达式打印所有组 我的问题很简单,我不能让C++ 11正则表达式返回字符串中所有的组。

c++;11正则表达式打印所有组 我的问题很简单,我不能让C++ 11正则表达式返回字符串中所有的组。,c++,regex,c++11,C++,Regex,C++11,下面的代码是我正在使用的代码: #include <iostream> #include <regex> int main() { auto fixMessage("8=FIXT|9=69|35=5|34=18|49=102|56=asd|115=TESTTESTTEST|52=20170810-15:36:22.500867816|1409=42|"); std::regex e ("(([0-9]+)=(.*?)\\|)+?"); std::cmatch

下面的代码是我正在使用的代码:

#include <iostream>
#include <regex>

int main()
{
  auto fixMessage("8=FIXT|9=69|35=5|34=18|49=102|56=asd|115=TESTTESTTEST|52=20170810-15:36:22.500867816|1409=42|");
  std::regex e ("(([0-9]+)=(.*?)\\|)+?");
  std::cmatch element_match;

  if(std::regex_match(fixMessage, element_match, e)) {
        for (size_t i = 0; i < element_match.size(); ++i) {
            std::cout << i << ": " << element_match[i] << '\n';
        }
  }
  return 0;
}
虽然我希望所有的小组都能参加,而不仅仅是最后一组。。

重复捕获组只捕获最后一次迭代


您必须使用
std::regex_search

进行迭代,重复捕获组将只捕获最后一次迭代

如果您看到,您必须使用
std::regex_search

进行迭代,例如,您将看到

regex\u匹配
。。。尝试将正则表达式与整个字符序列匹配

regex\u搜索
。。。尝试将正则表达式与字符序列的任何部分匹配

[我的重点]

该函数将只找到一个匹配项。你应该改用。

如果你看到,例如,你会看到的

regex\u匹配
。。。尝试将正则表达式与整个字符序列匹配

regex\u搜索
。。。尝试将正则表达式与字符序列的任何部分匹配

[我的重点]


该函数将只找到一个匹配项。您应该使用。

您可能应该结合使用
regex\u match
regex\u search
。第一个可用于检查整个字符串的有效性,第二个可用于提取所有匹配组:

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

int main() 
{

    std::string s("8=FIXT|9=69|35=5|34=18|49=102|56=asd|115=TESTTESTTEST|52=20170810-15:36:22.500867816|1409=42|");
    std::regex re("((\\d+)\\=([^|]*?)\\|)+?");

    if (std::regex_match(s, re)) 
    {
        for (std::smatch m; std::regex_search(s, m, re); s = m.suffix())
        {
            std::cout << m[1] << "\t\t" << m[2] << "\t\t" << m[3] << std::endl;
        }
    }

    return 0;
}

您可能应该结合使用
regex\u match
regex\u search
。第一个可用于检查整个字符串的有效性,第二个可用于提取所有匹配组:

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

int main() 
{

    std::string s("8=FIXT|9=69|35=5|34=18|49=102|56=asd|115=TESTTESTTEST|52=20170810-15:36:22.500867816|1409=42|");
    std::regex re("((\\d+)\\=([^|]*?)\\|)+?");

    if (std::regex_match(s, re)) 
    {
        for (std::smatch m; std::regex_search(s, m, re); s = m.suffix())
        {
            std::cout << m[1] << "\t\t" << m[2] << "\t\t" << m[3] << std::endl;
        }
    }

    return 0;
}

如果整个字符串与正则表达式不匹配,能否在正则表达式搜索中定义为不匹配?因为在我看来,我必须使用正则表达式匹配来检查整个字符串是否匹配,而不仅仅是其中的一部分。如果整个字符串与正则表达式不匹配,您能在正则表达式搜索中定义为不匹配吗?因为在我看来,我必须使用regex_匹配来检查整个字符串是否匹配,而不仅仅是其中的一部分。这还不错,但我关注的是性能问题,我想我会开发自己的regex解析器。这还不错,但我关注的是性能问题,我想我会开发自己的regex解析器。
8=FIXT|         8               FIXT
9=69|           9               69
35=5|           35              5
34=18|          34              18
49=102|         49              102
56=asd|         56              asd
115=TESTTESTTEST|               115             TESTTESTTEST
52=20170810-15:36:22.500867816|         52              20170810-15:36:22.500867816
1409=42|                1409            42