1

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 アドレスを取得する別の関数)

4

1 に答える 1