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