Boost Regex用于格式化MAC地址字符串
Boost Regex for formatting MAC Address string
我需要格式化一个包含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 中有类似的功能,但是如果这样做可以帮助您。如果没有,我可以删除。
相关文章:
- C++ 将地址保存为字符串的向量转换为新的向量
- 编译器如何将链表中的地址字符串在一起?
- 为什么cout输出内存地址不是字符串?
- 在字符串函数的指针中返回地址
- 在带有 (void*) 强制转换的字符串中打印字符的内存地址
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 将指针分配给字符串变量中包含的地址
- C 给出了一个字符串列表,如何从类中获取各个变量地址
- 将 char[ ][ ] 的地址复制到 C 字符串
- 如何从地址获取字符串?
- 返回类型 char* 的成员函数返回在 while 循环后包含不同字符串的地址
- 无符号的 int 到 IP 地址字符串,不带 itoa/to_string/boost
- 为什么此代码打印字符串而不是打印地址
- 如何将字符串地址移至C 中的函数
- 为什么'std::string'中第一个元素的地址打印为整个字符串?
- 如何将字符串转换为地址
- 访问字符串元素地址
- C++为什么字符串的地址尽管是十六进制格式,但不能存储在 long int 变量中?
- 第一个字符串元素的地址产生意外结果
- Boost Regex用于格式化MAC地址字符串