Автор Тема: [RegExp] Получение IP-адреса из строки  (Прочитано 8116 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн r35p3ct [?]

  • Продвинутый
  • ***
  • Сообщений: 222
  • Репутация: 60
  • Пол: Мужской
    • Награды
Насчет табов еще точно не знаю, пока парсю сохраненную страницу, на работе буду проверять, что выдаст _INetGetSource.
Только вот начал разбираться с StringRegExp, CreatoR, подскажи как вырезать из строки IP, мне кажется можно как то по другому....
Код: AutoIt [Выделить]
$b='        <a href="http://xxx.ru/ip=192.68.1.2">192.68.1.2</a>'
$IPtmp=StringRegExp($b, "\>.*\<", 1)
$IP=StringRegExpReplace($MODIPtmp[0],'[><]','')
 


Русское сообщество AutoIt

[RegExp] Получение IP-адреса из строки
« Отправлен: Октябрь 20, 2009, 18:02:11 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7816
  • Репутация: 2284
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [RegExp] Получение IP-адреса из строки
« Ответ #1, Отправлен: Октябрь 20, 2009, 18:40:46 »
Вот функция для получения массива со всеми IP из строки:

Код: AutoIt [Выделить]
#include <Array.au3>

$b = '        <a href="http://xxx.ru/ip=192.68.1.2">192.68.1.2</a>'
$IPsArray = _StringToIPArray($b)
_ArrayDisplay($IPsArray)

Func _StringToIPArray($sString)
    Local $avArray = StringRegExp($sString, '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})', 3)
    Local $avRetArr[UBound($avArray)+1], $iUbound
   
    For $i = 0 To UBound($avArray)-1
        If _StringIsValidIP($avArray[$i]) Then
            $avRetArr[0] += 1
            $avRetArr[$avRetArr[0]] = $avArray[$i]
        EndIf
    Next
   
    If $avRetArr[0] = 0 Then Return SetError(1, 0, 0)
   
    ReDim $avRetArr[$avRetArr[0]+1]
    Return $avRetArr
EndFunc

Func _StringIsValidIP($sIP_String, $iRet_Flag=-1)
    If $iRet_Flag <> -1 Then Return StringRegExp($sIP_String, '\A([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\z')
   
    Return StringRegExpReplace($sIP_String, '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*', '\1')
EndFunc
 



Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн r35p3ct [?]

  • Продвинутый
  • ***
  • Сообщений: 222

  • Автор темы
  • Репутация: 60
  • Пол: Мужской
    • Награды
Re: [RegExp] Получение IP-адреса из строки
« Ответ #2, Отправлен: Октябрь 20, 2009, 18:59:33 »
Отлично, только вот есть ли смысл прогонять весь массив, если известна строка содержащая ИП?
А можешь переделать для поиска мак адреса?
Цитировать
<td>1,6,00:1a:ad:77:30:de</td> на выходе нужен 00:1a:ad:77:30:de
PS Вообще задача стоит спарсить с сайта пару айпишников и маков и строчку с текстом.
UPD:
Получилось так:
Код: AutoIt [Выделить]
$b = '        <td>1,6,00:aa:a2:2a:30:de</td>'
$MAC= StringRegExp($b, '([\dabcdef]{2}\:[\dabcdef]{2}\:[\dabcdef]{2}\:[\dabcdef]{2}\:[\dabcdef]{2}\:[\dabcdef]{2})', 1)
ConsoleWrite('MAC: '&$MAC[0]&@LF)

хотя вроде должно работать так:
Код: AutoIt [Выделить]
$MAC = StringRegExp($b, '([\d\a]{2}\:[\d\a]{2}\:[\d\a]{2}\:[\d\a]{2}\:[\d\a]{2}\:[\dabcdef]{2})', 1)

или
Код: AutoIt [Выделить]
$MAC = StringRegExp($b, '([\x]{2}\:[\x]{2}\:[\x]{2}\:[\x]{2}\:[\x]{2}\:[\x]{2})', 1)

но не работает почему то.
« Последнее редактирование: Октябрь 20, 2009, 20:11:53 от r35p3ct »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7816
  • Репутация: 2284
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [RegExp] Получение IP-адреса из строки
« Ответ #3, Отправлен: Октябрь 20, 2009, 20:35:31 »
r35p3ct [?]
Цитировать
есть ли смысл прогонять весь массив, если известна строка содержащая ИП?
Можно и так:

Код: AutoIt [Выделить]
$b = '        <a href="http://xxx.ru/ip=192.68.1.2">192.68.1.2</a>'
$IP = StringRegExpReplace($b, '.*ip=(.*?)">.*', '\1')

ConsoleWrite($IP & @CRLF)


Русское сообщество AutoIt

Re: [RegExp] Получение IP-адреса из строки
« Ответ #3 Отправлен: Октябрь 20, 2009, 20:35:31 »

Оффлайн Core2Duo [?]

  • Сообщений: 28
  • Репутация: -3
    • Награды
Re: [RegExp] Получение IP-адреса из строки
« Ответ #4, Отправлен: Октябрь 20, 2009, 21:39:14 »
 я свой ip узнаю из checkip.dyndns.com , там так же скачивается HTML код , я его вот атк выделяю

$b = '        <a href="http://xxx.ru/ip=192.68.1.2">192.68.1.2</a>'
$b=stringSplit($b,">")
$b=$b[ $b[0]-1 ] ; получаем кусок 192.68.1.2</a
$b=$b=stringSplit($b,"<")
$b=$b[ 1 ] ; получаем 192.68.1.2
мифы о быстрых ядах, которыми можно отравить оружие - это именно мифы. Из вышенаписанного понятно, что эффективнее всего работают ингаляционные яды. Площадь легких человека составляет порядка 100 кв. м. Соответственно, отравленный топор для достижения максимально быстрого эффекта желательно выкурить

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7816
  • Репутация: 2284
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [RegExp] Получение IP-адреса из строки
« Ответ #5, Отправлен: Октябрь 21, 2009, 01:10:22 »
Core2Duo [?]
Цитировать
я свой ip узнаю из checkip.dyndns.com
А чем не угодила серия макросов @IPAddress?

Цитировать
я его вот атк выделяю
Зачем такие сложности, тем более в скрипте ошибка. Если не через RegExp, то лучше так:

Код: AutoIt [Выделить]
$sStr = '        <a href="http://xxx.ru/ip=192.68.1.2">192.68.1.2</a>'

$iStart = StringInStr($sStr, '>', 0, -2) + 1
$iLenght = StringInStr($sStr, '<', 0, -1) - $iStart

$sStr = StringMid($sStr, $iStart, $iLenght)

ConsoleWrite($sStr & @CRLF)


Оффлайн amel27 [?]

  • VIP
  • *
  • Сообщений: 146
  • Репутация: 55
  • Пол: Мужской
    • Награды
Re: [RegExp] Получение IP-адреса из строки
« Ответ #6, Отправлен: Октябрь 21, 2009, 12:55:43 »
но не работает почему то.
тогда уж так:
Код: AutoIt [Выделить]
#include <array.au3>

$b = '        <td>1,6,00:aa:a2:2a:30:de</td>'
$a = StringRegExp($b, "[^:]([[:xdigit:]]{2}(?::[[:xdigit:]]{2}){5})[^:]", 3)

_ArrayDisplay($a)


Русское сообщество AutoIt

Re: [RegExp] Получение IP-адреса из строки
« Ответ #6 Отправлен: Октябрь 21, 2009, 12:55:43 »