获取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:

总结

在分割字符串的过程中,可以使用常用的字符串技巧和正则表达式相结合的方式

获取分割字符串的内容高级技巧相关推荐

  1. java正则表达式获取指定两个字符串之间内容

    xml解析利用正则表达式获取指定两个字符串之间内容 在遇到解析复杂xml的时候,想到大家所想到的都是利用dom4j作为首发工具,但是当遇到层次很多,较为复杂,我们难道还需要从根节点一层一层的解析下去吗 ...

  2. python获取输入框内容长度_python3 tkinter 获取输入字符串长度

    python 3  获取输入字符长度 #-*- coding:utf-8 -*- from tkinter import * from tkinter import messagebox def ge ...

  3. Linux 命令之 cut -- 分割字符串,显示或删除指定字段的内容,合并文件内容

    文章目录 一.命令介绍 二.常用选项 三.命令示例 根据指定的字节范围显示指定文件中的内容 指定字段分隔符,显示指定字段的内容 显示指定字段的内容 根据指定的字符范围显示指定文件中的内容 显示指定字段 ...

  4. 获取分割后右边的字符串

    在数据库实现字符串分割,然后获取分割后右边的字符串,如: 实现这个功能,主要是从右边开始去获取分割的字符的位置来进行切割: CREATE FUNCTION [dbo].[svf_GetSplitRig ...

  5. 如何分割字符串以便可以访问项目x?

    使用SQL Server,如何分割字符串以便可以访问项x? 取一个字符串" Hello John Smith". 我如何按空格分割字符串并访问索引1的项目,该项目应返回" ...

  6. 字符串处理分割字符串

    **strtok** 分解字符串为一组字符串.s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符).首次调用时,s指向要分解的字符串,之后再次调用要把s设成N ...

  7. Shell脚本实现简单分割字符串

    这篇文章主要介绍了Shell脚本实现简单分割字符串,本文讲解使用CUT命令实现以逗号.分号或其它分隔符来切割字符串,需要的朋友可以参考下 我们有这样一个字符串: 复制代码代码如下: info='abc ...

  8. shell split分割字符串_Python3 CookBook | 字符串和文本

    欢迎关注我的微信公众号 AlwaysBeta,更多精彩内容等你来. 以下测试代码全部基于 Python3. 字符串操作在程序中的出现频率相当高,包括分割,替换,拼接等等,这篇文章介绍五个最常遇到的问题 ...

  9. Google C++每周贴士 #10: 分割字符串,不必拘小节

    (原文链接:https://abseil.io/tips/10 译者:clangpp@gmail.com) 每周贴士 #10: 分割字符串,不必拘小节 最初发布于:2012-08-16 作者:Greg ...

最新文章

  1. Mysql5.6-DDL是否加锁
  2. [导入]XmlReader 读取器读取内存流 MemoryStream 的注意事项
  3. [转载]使用RoboCopy 命令
  4. ubuntu搭建【python】运行环境
  5. stm32l0的停止模式怎么唤醒_「正点原子STM32Mini板资料连载」第十九章 待机唤醒实验...
  6. matlab怎么画二维热力图_Tableau画日历热力图
  7. 不同环境配置Django
  8. linux系统 锐捷_Client for RuiJie(锐捷客户端 for linux) 升级版
  9. C语言从入门到精通——初阶1 初识C语言
  10. FPGA使用ISERDES2过采样
  11. 免费电子书籍--网址
  12. oracle客户端免安装教程,免安装Oracle客户端软件
  13. BMFont字体编辑器的使用
  14. 电脑网络——QQ、微信可以登录,浏览器打不开的解决方法
  15. h5物体拖动_iH5高级教程:H5交互进阶,拖动物品效果
  16. yocs_cmd_vel_mux和yocs_velocity_smoother
  17. 程序员如何编写高大上且实用的技术文档--转
  18. 圣墟手游怎么在电脑上玩 圣墟PC版玩法教程
  19. Pytorch中dim的理解
  20. 安卓手机安装charles证书后,抓包依然提示unkown问题(An unknown issue occurred processing the certificate )

热门文章

  1. java em算法_python em算法的实现
  2. 301跳转 https_http跳转https和https跳转http的两种301重定向代码
  3. 利用python进行数据分析 笔记_利用python进行数据分析--(阅读笔记一)
  4. 定时更换超级连接的代码
  5. 在这个功能上,iOS 落后 Android 了
  6. 知乎回应“腾讯搜狗退出知乎股东”:是上市后的标准操作
  7. 苹果“炸场”发布会官宣定档10月19日!终于等到你俩
  8. Facebook再次发生全球性宕机
  9. 威马汽车创始人沈晖:10万以下的不能叫智能电动汽车
  10. 罗永浩:当年签了 “流氓协议” 将公布这个恶劣投资者