Показать сообщение отдельно

  #4  
Старый 11.07.2016, 11:43
QGate
Познающий
Регистрация: 27.03.2016
Сообщений: 78
С нами: 5331145

Репутация: 0
По умолчанию

Цитата:
Сообщение от legend2360  

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
;
}
 
Ответить с цитированием