我在 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;
}
但是,正则表达式并没有提取组本身。相反,它只是吐出整条线!
我以为我非常仔细地遵循示例,但似乎我没有正确使用 regex_iterator。
1 - 我怎样才能最好地从这个字符串中提取 IP
(附带问题 - 是否有一个 C++ 函数将进入网络并从主机名获取 IP,就像 tracert 我们的 pint 一样?另一个会像 arp -a 一样获取 mac 地址)