簡體   English   中英

正則表達式迭代器在Cpp中不起作用

[英]Regular Expression iterator is not working in Cpp

我在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

(附帶問題 - 是否有一個C ++函數將進入網絡並從主機名獲取IP就像跟蹤我們的品脫?另一個將獲得mac地址就像arp -a一樣)

我沒有MSVC,GNU已經破壞了std :: regex支持,所以我在這里玩過'boost :: regex':

regex e("^\\s*1\\s.*?\\[(.*?)\\]");

請注意:

  • 不假設空格是空格而不是制表符
  • 不假設線的起始處有確切的間距
  • 強制至少1個空間1字符(因此它不會匹配線開始13 ,例如)
  • 如果在可能的情況下使用非貪婪匹配
#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM