Другое С/С++ Вопрос - Ответ

QGate

Новичок
78
0
C++:
std::regex rx("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})");
std::smatch rx_match;

std::string str = "15.14.88.4 127.0.0.1";
byte count = 0;

// http://stackoverflow.com/questions/6136699/visual-studio-2010-c-tr1-regex-equivalent-of-perl-g-global-modifier
auto str_it = str.cbegin();
while (std::regex_search(str_it, str.cend(), rx_match, rx))
{
    // SF->Log("%s", rx_match.str().c_str());
    str_it = rx_match[0].second;
    count++;
}
printf("Found: %d\n", count);
Если хочешь прям точно определить, IP ли это(максимальный диапазон ипа - 255.255.255.255), то можешь найти в интернете, либо помучиться самому. Вообще, составить регулярку для такой задачи будет тяжело, поэтому как-нибудь через строки проверяй.
Я нашел выход из этой ситуации. Я сделал просто 2 регулярки, одна ищет 2 ип адреса в стринге, вторая - один, соответственно если не находится 2 адреса, ищется 1.
C++:
std::regex rgx1("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}) (\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})");
    std::regex rgx2("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})");
    std::smatch match;
if (std::regex_search(playerid, match, rgx1))
        {
                    SF->LogFile("[EM]: Найдено 2 ip адреса", m);
                    findedip1 = match[1];
                    findedip2 = match[2];
                    SF->LogFile("[EM]: %s %s", findedip1.c_str(), findedip2.c_str());
                    return;
        }
        else if (std::regex_search(playerid, match, rgx2))
        {
            SF->LogFile("[EM]: Найден 1 ip адрес.");
            findedip1 = match[1];
            SF->LogFile("[EM]: %s", findedip1.c_str());
            return;
        }
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Я нашел выход из этой ситуации. Я сделал просто 2 регулярки, одна ищет 2 ип адреса в стринге, вторая - один, соответственно если не находится 2 адреса, ищется 1.
Твои регурялки плохие.
https://yadi.sk/i/7A9glYbFtBekc
Так же регекс сеарч нужно юзать в цикле, а не как условие.
http://pastebin.com/V0d8paZX
 

barspinoff

Известный
126
33
чем можно заменить _asm db FF ?
при компиляции ошибку выдаёт
 
Последнее редактирование: