Boost Regex用于格式化MAC地址字符串

Boost Regex for formatting MAC Address string

本文关键字:地址 字符串 MAC 格式化 Regex 用于 Boost      更新时间:2023-10-16

我需要格式化一个包含MAC地址的字符串(用于记录)。字符串是格式" xxxxxxxxxxxx"的字符串,我需要将其标准化为" xx-xx-xx-xx-xx-xx-xx"。为此目的有什么好言论?

我正在使用GCC 4.4.7编译C 代码。另外,我更喜欢使用Boost Regex。但是,如果有任何简单的选择,请告诉我。这就是我到目前为止的

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})

示例演示

并将替换字符串作为\1-。例如,在JavaScript中,您可以拥有类似的东西:

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

这样做的想法是将每个两个字符替换为相同的字符和连字符。

再次,我不确定您是否在C 中有类似的功能,但是如果这样做可以帮助您。如果没有,我可以删除。