Код C ++ для поиска всех IP-адресов в файле

Мне нужно написать программу для сканирования текстового файла и получения всех IP-адресов (формата 256.256.256.256) в файле.


person Community    schedule 06.02.2009    source источник
comment
Кстати, 256 - недопустимый октет.   -  person paxdiablo    schedule 06.02.2009
comment
Спасибо всем за ваш вклад. Это регулярное выражение ... Также, если вы планируете использовать Perl, догадка сделает это намного проще.   -  person    schedule 08.02.2009


Ответы (4)


Вы можете написать BNF, используя Boost :: spirit или создайте регулярное выражение для поиска IP-адресов с помощью Boost :: regex

person paxos1977    schedule 06.02.2009

Может, стоит попробовать использовать регулярные выражения? Вы можете прочитать файл, возможно, отсканировав его построчно, а затем использовать регулярное выражение в строке для извлечения IP-адресов.

Если файл содержит только IP-адреса и никакой другой текст, возможно, будет проще использовать scanf с "%hhu.%hhu.%hhu.%hhu" в качестве строки формата.

person dreamlax    schedule 06.02.2009

Это регулярное выражение поможет:

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

Измените этот код под свои нужды:

using namespace System::Text::RegularExpressions;
void doTheMatch( String^ inputString, String^ filter )
{
    Console::WriteLine( "original string:  {0}", inputString );
    Console::WriteLine( "attempt to match: {0}", filter );

    Regex^ regex = gcnew Regex( filter );
    Match^ match = regex->Match( inputString );

    if ( ! match->Success )
    {
        Console::WriteLine( 
            "Sorry, no match of {0} in {1}", filter, inputString );
        return;
    }

    for ( ; match->Success; match = match->NextMatch() )
    {
        Console.WriteLine( 
            "The characters {0} match beginning at position {1}",  
            match->ToString(), match->Index );
    }
}
person Chris Ballance    schedule 06.02.2009
comment
Откуда взялось System :: Text :: RegularExpressions? - person ypnos; 06.02.2009
comment
Разве это не вопрос о C ++, а не о C # ?? В конце концов, я мог бы дать ответ и на Perl ... - person siukurnin; 06.02.2009
comment
Я думаю, что это управляется C ++, а не C #. В любом случае трудно понять, чего хотел автор. Хотя, похоже, это должно помочь. - person Sean; 06.02.2009
comment
Я предполагал, что это управляемый C ++, поскольку он не был указан - person Chris Ballance; 06.02.2009

Неужели это должен быть C ++? Регулярные выражения и grep ваши друзья!

person kquinn    schedule 06.02.2009
comment
Возможно, он хочет подключиться к IP-адресам, которые он читает. - person dreamlax; 06.02.2009