获取分割字符串的内容高级技巧
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取分割字符串的内容高级技巧相关的知识,希望对你有一定的参考价值。
获取arp -a 返回
const char * test = "接口: 192.168.1.144 --- 0x5"
" Internet 地址 物理地址 类型"
" 192.168.1.1 cc-81-da-02-ed-f1 动态"
" 192.168.1.255 ff-ff-ff-ff-ff-ff 静态"
" 224.0.0.22 01-00-5e-00-00-16 静态"
" 224.0.0.251 01-00-5e-00-00-fb 静态"
" 224.0.0.252 01-00-5e-00-00-fc 静态"
" 239.255.255.250 01-00-5e-7f-ff-fa 静态"
" 255.255.255.255 ff-ff-ff-ff-ff-ff 静态";
返回如上面的字符串,如何分割出来呢,获取mac 和 ip 地址的对应,有两种方法一是使用正则表达式,二是使用stl的stringstream 和getline 方法
1 使用stringstream
1 分割行
2 分割字符串
3 插入map表
1.1、getline
使用getline 函数分割行,这个可以参考我的其他文章
1.2、使用streamstream 分割字符串
string test2 = " 192.168.1.1 cc-81-da-02-ed-f1 动态";
std::stringstream s(test2);
string s1, s2, s3;
s >> s1 >> s2 >> s3;
cout << s1 << endl;
cout << s2 << endl;
cout << s3 << endl;
输出
192.168.1.1
cc-81-da-02-ed-f1
动态
2 使用正则表达式
(\\S+)\\s+(\\S+)\\s+(\\S+)
2.1 使用getline分割
这一部分略过
2.2 使用正则
(\\S+)\\s+(\\S+)\\s+(\\S+)
解释一下:S 为所有非空白字符,相当于
char * pos = " xxxx xxx xxx "
while((*pos++)!=' ');
后跳到了第一个非空白字符
s 为空白字符,意思为当中有空白字符,相当于stringstream 的字符串移位输出去掉空格,+在正则表达式中意思为一个或者多个
#include <regex>
#include <iostream>
#include <string>
#include <sstream>
std::string test1 = "接口: 192.168.1.144 --- 0x5";
std::string test2 = " 192.168.1.1 cc-81-da-02-ed-f1 动态";
const char * test = "接口: 192.168.1.144 --- 0x5"
" Internet 地址 物理地址 类型"
" 192.168.1.1 cc-81-da-02-ed-f1 动态"
" 192.168.1.255 ff-ff-ff-ff-ff-ff 静态"
" 224.0.0.22 01-00-5e-00-00-16 静态"
" 224.0.0.251 01-00-5e-00-00-fb 静态"
" 224.0.0.252 01-00-5e-00-00-fc 静态"
" 239.255.255.250 01-00-5e-7f-ff-fa 静态"
" 255.255.255.255 ff-ff-ff-ff-ff-ff 静态";
int main() {
//std::stringstream s = test2;
std::string target = "@abc def--";
std::regex e("(\\\\S+)\\\\s+(\\\\S+)\\\\s+(\\\\S+)");
std::smatch sm;
std::regex_search(test2, sm, e);
for (int i = 0; i < sm.size(); ++i) {
std::cout << "sm[" << i << "]: " << sm[i] << std::endl;
}
std::cout << "sm.prefix: " << sm.suffix() << std::endl;
return 0;
}
输出:
sm[0]: 192.168.1.1 cc-81-da-02-ed-f1 动态
sm[1]: 192.168.1.1
sm[2]: cc-81-da-02-ed-f1
sm[3]: 动态
sm.prefix:
总结
在分割字符串的过程中,可以使用常用的字符串技巧和正则表达式相结合的方式
以上是关于获取分割字符串的内容高级技巧的主要内容,如果未能解决你的问题,请参考以下文章