Visual Studio 2010 で C++ を使用しています (v11 標準ではないと思いますが、確認していません)。
次のコードを使用して、tracert の 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 を抽出するにはどうすればよいですか?
(補足質問 - tracert のようにネットワークに入り、ホスト名から IP を取得する C++ 関数はありますか? arp -a のように MAC アドレスを取得する別の関数)