gpt4 book ai didi

c++ - 用于格式化 MAC 地址字符串的 Boost Regex

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:35 30 4
gpt4 key购买 nike

我需要格式化一个包含 MAC 地址的字符串(用于记录)。该字符串的格式为“xxxxxxxxxxxx”,我需要将其标准化为“xx-xx-xx-xx-xx-xx”。为此,什么是好的正则表达式?

我正在使用 GCC 4.4.7 编译 C++ 代码。另外,我更喜欢使用 boost 正则表达式。但是,如果有任何更简单的选择,请告诉我。这是我目前所拥有的

std::string s = "e8f5a4b3e8e4";
boost::regex expr("^ *([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2}) *$", boost::regex::extended | boost::regex::icase);
std::string fmt{"\\1-\\2-\\3-\\4-\\5-\\6"};
std::cout << boost::regex_replace(s, expr, fmt) << '\n';

我想知道是否有我正在使用的正则表达式的优化版本。我试过这个正则表达式 - ^ *([[:xdigit:]]{2}){6} *$https://regex101.com但它并没有捕获所有的组。它只捕获最后一个。

最佳答案

首先,这不是正确的答案,但我将其发布是因为它可能对您有所帮助。我不确定这是否适用于 C++,因为它适用于其他语言。

你可以试试这样的正则表达式:

(\w{2})
or
(.{2})
or
([[:xdigit:]]{2})

Example demo

并使用替换字符串作为 \\1-。例如,在 javascript 中你可以有这样的东西:

var re = /(\w{2})/g; 
var result = 'e8f5a4b3e8e4'.replace(re, '$1-');
// result => e8-f5-a4-b3-e8-e4

这个想法是用相同的字符加一个连字符替换每两个字符。

同样,我不确定您在 C++ 中是否有类似的功能,但如果有的话,这个答案可以帮助您。如果没有,我可以删除。

关于c++ - 用于格式化 MAC 地址字符串的 Boost Regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065954/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com