PDA

Показать полную графическую версию : [решено] Парсер IP из текста


morgan1991
24-01-2010, 16:10
Здравствуйте!
Помогите пожалуйста никак не могу разобраться с шаблонами.
Куда ставить скобки, что нужно экранировать и т.д. вообще даже такое простое выражение, нужно выковырять с текста IP такого вида: 127.0.0.1:8080, IP и порт меняется.
Никак не могу сделать. Объясните пожалуйста...

Creat0R
24-01-2010, 16:58
Слишком общий заголовок темы, переименуй во что нибудь более специфическое.

По поводу выковыривания IP:

$sString = @IPAddress2 (http://www.autoitscript.com/autoit3/docs/macros.htm#@IPAddress2) & ":8080"
$GetValidIp = _StringIsValidIP($sString, -1, 1)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)($GetValidIp)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _StringIsValidIP($sIP_String, $iRet_Flag=-1, $iRet_Port=0)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iRet_Flag <> -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sIP_String, '\A([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\z')

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sPattern = '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*'
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iRet_Port Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $sPattern = '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?::\d{4})?).*'

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sIP_String, $sPattern, '\1')
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

morgan1991
24-01-2010, 18:48
Ничего не понял...
Есть текст html
В нём есть эти IP, прокси.
Нужно считать их в массив.
$Mass = StringRegExp($Text, $Pattern, 3)
Чем заполнить переменную $Pattern???

Creat0R
24-01-2010, 19:07
Чем заполнить переменную $Pattern? »
$sPattern = '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?::\d{4})?).*'

morgan1991
24-01-2010, 20:03
Или я дурак или лыжи по асфальту не едут....
Local $TempHtml = _ProxyDownload("proxies.my-proxy.com", "80", "http://proxies.my-proxy.com/")
Local $TempFormula = StringRegExp($TempHtml, '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?::\d{*})?).*', 3)
For $i = 0 To UBound($TempFormula)-1 Step +1
FileWrite("ttttttt.txt", $TempFormula[$i] & @CRLF)
Next
Возвращает:
5.0.2.263
211.162.208.50
82.79.131.126

madmasles
24-01-2010, 21:56
morgan1991,

Вот здесь Две функции CreatoRа (http://autoit-script.ru/index.php?topic=414.0)

Я их чуть-чуть переделал под себя(CreatoR, извини, пожалуйста):

#include <Inet.au3>

$url1 = "http://www.proxylist.net/list/pl/0/1"
$sFile = "proxy.txt"
$sTest = _INetGetSource($url1)
If $sTest <> "" Then
$IPsArray = _StringToIPArray($sTest)
For $i = 1 To $IPsArray[0] Step 2
FileWrite($sFile, $IPsArray[$i] & @CRLF)
Next
EndIf

Func _StringToIPArray($sString)
Local $avArray = StringRegExp($sString, '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5})', 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 ;==>_StringToIPArray

Func _StringIsValidIP($sIP_String, $iRet_Flag = -1)
If $iRet_Flag <> -1 Then Return StringRegExp($sIP_String, '\A(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5})\z')

Return StringRegExpReplace($sIP_String, '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}).*', '\1')
EndFunc ;==>_StringIsValidIP

В приведенном примере у меня железно выбирает все IP-адреса с указанного адреса.




© OSzone.net 2001-2012