正则表达式迭代器在Cpp中不起作用
Regular Expression iterator is not working in Cpp
我正在Visual Studio 2010上使用C++(我不认为它是v11标准,但我还没有检查)。
我正试图用以下代码提取出一个跟踪器的IP地址:
#include <iomanip>
#include <iostream>
#include <string>
#include <regex>
using namespace std;
typedef regex_iterator<string::iterator> regexp;
#define MAX_BUFFER 255
int main() {
string out;
char buffer[MAX_BUFFER];
smatch m;
regex e(" 1.+\[(.+)\]");
FILE *stream = _popen("tracert SOMEHOSTNAME", "r");
while ( fgets(buffer, MAX_BUFFER, stream) != NULL ) {
out = buffer;
regexp rit (out.begin(), out.end(), e);
regexp rend;
while (rit != rend) {
cout << rit->str() << endl;
++rit;
}
}
_pclose(stream);
cout << "Done.";
cin >> buffer;
}
但是,regexp并没有提取出组本身。相反,它只是在吐出整条线!
我认为我非常仔细地遵循了示例,但似乎我没有正确使用regex_iterator。
1-如何最好地从这个字符串中提取IP
(附带问题-是否有一个C++函数可以进入网络,从主机名中获取IP,就像tracert我们的品脱一样?另一个函数可以获得mac地址,就像arp-a)
我没有MSVC,GNU已经破坏了对std::regex的支持,所以我在这里玩了`boost::regex':
regex e("^\s*1\s.*?\[(.*?)\]");
注意:
- 不假定空格是空格而不是制表符
- 在行首没有假定精确的间距
- 是否要求在
1
字符后至少有1个空格(因此它与以13
开头的行不匹配,例如) - if在可能的情况下使用非贪婪匹配
#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
using boost::regex;
using boost::regex_iterator;
#define MAX_BUFFER 255
int main()
{
char buffer[MAX_BUFFER];
regex e("^\s*1\s.*?\[(.*?)\]");
FILE *stream = popen("cat input.txt", "r");
while(fgets(buffer, MAX_BUFFER, stream) != NULL)
{
typedef regex_iterator<string::iterator> regit;
string out = buffer;
regit rit(out.begin(), out.end(), e);
regit rend;
while(rit != rend)
{
cout << (*rit)[1].str() << endl;
++rit;
}
}
pclose(stream);
cout << "Done.n";
}
这似乎适用于input.txt
:
Tracing route to 11.1.0.1 over a maximum of 30 hops
1 2 ms 3 ms 2 ms [157.54.48.1]
2 75 ms 83 ms 88 ms [11.1.0.67]
3 73 ms 79 ms 93 ms [11.1.0.1]
Trace complete.
打印:
157.54.48.1
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- cpp 数组 - 分配常量索引有效,而非常量索引不起作用
- CPP / JUCE 音频编程框架 - 滑块数组不起作用 - 单个滑块工作
- cpp 字符浮动不起作用
- 我的字符串比较在 CPP 中不起作用
- perl 内联 cpp 在 Windows 32 位上不起作用
- ActiveMQ 3.8.3 (CPP) 优先级备份的问题不起作用
- .cpp.模板类继承不起作用
- CPP 文件运行,但在编译为 exe 时不起作用
- 正则表达式迭代器在Cpp中不起作用
- .cpp文件的组合框Scopes和Function in Scope在VS2008 sp2中不起作用.知道为什么这些组合
- Yaml-cpp 解析不起作用 冒号后缺少空间
- OpenFL - 音频在 CPP 目标上不起作用
- 使用CMake编译cpp-netlib+Boost程序不起作用