使用正则表达式获取大括号块的列表
Getting a list of curly brace blocks using regex
我正在为我用 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_iterator
的1
参数仅提取捕获到组 1 中的 thiose 值。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- 使用 STD 正则表达式标记逗号分隔的列表
- Makefile中扩展正则表达式列表的分隔符
- boost正则表达式中的命名捕获/组列表
- 使用这个正则表达式,为什么它只捕获最后一个列表项?
- 如何从正则表达式模式列表中找到最具体的匹配项