使用正则表达式获取大括号块的列表

Getting a list of curly brace blocks using regex

本文关键字:列表 正则表达式 获取      更新时间:2023-10-16

我正在为我用 c++ 做的项目构建一个简单的数据编码器/解码器,数据以这种格式写入文件(虚拟数据(:

{X143Y453CGRjGeBK}{X243Y6789CaRyGwBk}{X5743Y12CvRYGQBs}

块的数量是不确定的,块的大小是可变的。

为了解码图像,我需要遍历每个大括号块并处理其中的数据,理想的输出如下所示:

"X143Y453CGRjGeBK" "X243Y6789CaRyGwBk" "X5743Y12CvRYGQBs"

我得到的最接近的是:

"\{(.*)\}"

但这给了我整个序列而不是每个块。

抱歉,如果这是一个简单的问题,但正则表达式还没有真正点击我,这可以通过正则表达式还是我应该使用不同的方法?

您可以使用[^{}]+

  • [^{}]:匹配下面列表中不存在的单个字符(在本例中为'{' & '}'(
  • +:匹配该角色后,尽可能多地匹配一个和无限次。

测试:https://regex101.com/r/bNOK5U/1/

要提取大括号内多次出现的子字符串,这些子字符串内部没有大括号(即最内侧大括号内的子字符串(,您可以使用

#include <iostream>
#include <string>
#include <vector>
#include <regex>
int main() {
std::regex rx(R"({([^{}]*)})");
std::string s = "Text here {X143Y453CGRjGeBK} and here {X243Y6789CaRyGwBk}{X5743Y12CvRYGQBs} and more here.";
std::vector<std::string> results(std::sregex_token_iterator(s.begin(), s.end(), rx, 1),
std::sregex_token_iterator());
for( auto & p : results ) std::cout << p << std::endl;
return 0;
}

观看C++演示。

正则表达式字符串std::regex rx(R"({([^{}]*)})"){([^{}]*)},并且匹配

  • {-{
  • ([^{}]*)- 捕获组 1:除{}以外的零个或多个字符
  • }-}字符。

传递给std::sregex_token_iterator1参数仅提取捕获到组 1 中的 thiose 值。