Что нового

Данные из логов KerioWinroute

Rjevsky

Новичок
Сообщения
102
Репутация
4
Здравствуйте, помогите с разбором строк вида:
Код:
[01/May/2013 09:04:25] 192.168.101.2 - "Загрузка Connectify 3.0.0.20932" http://www.hosoft.ru/download/program/connectify-3.0.0.20932
[01/May/2013 08:55:41] 192.168.101.2 - "Раздаем WIFI без роутера (программа Connectify) | Всё об iPad" http://ipadstory.ru/razdaem-wifi-bez-routera-programma-connectify.html
[01/May/2013 08:55:56] 192.168.101.2 - "Обсуждение программы MyPublicWiFi - MyDiv" http://soft.mydiv.net/win/comments-MyPublicWiFi.html
[01/May/2013 08:56:31] 192.168.101.2 - "Connectify - Turn your PC into a Wi-Fi Hotspot and Get Faster Internet" http://www.connectify.me/
Требуется вытянуть: IP, содержимое кавычек, и часть URL типа http:\\site.ru (тоесть включая только доменное имя)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Логи KerioWinroute

Код:
#include "array.au3"
$string = '[01/May/2013 09:04:25] 192.168.101.2 - "Загрузка Connectify 3.0.0.20932" http://www.hosoft.ru/download/program/connectify-3.0.0.20932'
$string &= '[01/May/2013 08:55:41] 192.168.101.2 - "Раздаем WIFI без роутера (программа Connectify) | Всё об iPad" http://ipadstory.ru/razdaem-wifi-bez-routera-programma-connectify.html'
$string &= '[01/May/2013 08:55:56] 192.168.101.2 - "Обсуждение программы MyPublicWiFi - MyDiv" http://soft.mydiv.net/win/comments-MyPublicWiFi.html'
$string &= '[01/May/2013 08:56:31] 192.168.101.2 - "Connectify - Turn your PC into a Wi-Fi Hotspot and Get Faster Internet" http://www.connectify.me/"'
Local $var = StringRegExp($String, '(?si)[\[](.*?)[\]] (.*?) "(.*?)" http://(.*?)/', 3)
If Not @error Then
   _ArrayDisplay($var)
Else
   MsgBox(0,0,"No Match")
EndIf

Вот что получилось у меня :whistle:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: Логи KerioWinroute

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Логи KerioWinroute" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Rjevsky [?]
вот ещё от дефиса в IP избавиться бы
Мой вариант.
Код:
#include <Array.au3>

Local $aRes[1]

$sString = '[01/May/2013 09:04:25] 192.168.101.2 - "Загрузка Connectify 3.0.0.20932" http://www.hosoft.ru/download/program/connectify-3.0.0.20932' & @CRLF
$sString &= '[01/May/2013 08:55:41] 192.168.101.2 - "Раздаем WIFI без роутера (программа Connectify) | Всё об iPad" http://ipadstory.ru/razdaem-wifi-bez-routera-programma-connectify.html' & @CRLF
$sString &= '[01/May/2013 08:55:56] 192.168.101.2 - "Обсуждение программы MyPublicWiFi - MyDiv" http://soft.mydiv.net/win/comments-MyPublicWiFi.html' & @CRLF
$sString &= '[01/May/2013 08:56:31] 192.168.101.2 - "Connectify - Turn your PC into a Wi-Fi Hotspot and Get Faster Internet" http://www.connectify.me/"' & @CRLF
$aTmp = StringRegExp($sString, '(?si)\]\h(\d{1,3}(?:\.\d{1,3}){3}).*?"(.+?)".*?http://(.+?)/', 3)
$iUb = UBound($aTmp)
If Not $iUb Or Mod($iUb, 3) Then Exit 13
ReDim $aRes[$iUb / 3 + 1][3]
For $i = 0 To $iUb - 1 Step 3
	$aRes[0][0] += 1
	For $j = 0 To 2
		$aRes[$aRes[0][0]][$j] = $aTmp[$i + $j]
	Next
Next
$aTmp = 0
_ArrayDisplay($aRes)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Rjevsky, мастера? Неее, вот остальные кто отвечают в этом разделе они мастера, а я только пытаюсь освоить этот не дружелюбный синтаксис. Кстати это решение я писал с помощью этого упражнения: http://autoit-script.ru/index.php?topic=4901.msg39510#msg39510 (Пример 1) и встроенной справки.
Когда я впервые столкнулся с необходимостью использовать регэкспы, у меня в голове отложилось: "Если что-то не получается с регэкспами в autoit, иди сюда: http://autoit-script.ru/index.php/topic,4901.0.html". С помощью тех примеров, даже не вникая суть, а просто действуя по шаблону, я смог реализовать регэкспы типа таких:
Код:
^([0-9]{1,3})(?:[\|])([0-9]{1,3})(?:[\[])([A-Z]+[@][a-z]+[.][0-9]{1,5})(?:[\+])([a-zA-Z0-9]{4,12})(?:[\]])([A-Z0-9-]{30,45})
 
Автор
R

Rjevsky

Новичок
Сообщения
102
Репутация
4
Я пытался освоить это дело, но так и не смог вникнуть... А штука очень нужная, постоянно что требуется сделать.
Но этот урок я ещё не пробовал. Может и поможет. Спасибо за помощь в любом случае.
madmasles сделал всё идеально. Тема решена.

В результате тестирования появилось ещё пожелание: Можно ли в доменных именах если встречается
Код:
www.site.ru
резать и
Код:
www.
, оставив только
Код:
site.ru
?

Ещё проблема возникает с такими строками:
Код:
[01/May/2013 16:44:36] 192.168.1.1 - "" http://president.gov.by/
Из-за пустых кавычек смещается массив
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Rjevsky,
Так, вроде, нормально.
Код:
#include <Array.au3>

Local $aRes[1]

$sString = '[01/May/2013 09:04:25] 192.168.101.2 - "Загрузка Connectify 3.0.0.20932" http://www.hosoft.ru/download/program/connectify-3.0.0.20932' & @CRLF
$sString &= '[01/May/2013 08:55:41] 192.168.101.2 - "Раздаем WIFI без роутера (программа Connectify) | Всё об iPad" http://ipadstory.ru/razdaem-wifi-bez-routera-programma-connectify.html' & @CRLF
$sString &= '[01/May/2013 08:55:56] 192.168.101.2 - "" http://www.soft.mydiv.net/win/comments-MyPublicWiFi.html' & @CRLF
$sString &= '[01/May/2013 08:56:31] 192.168.101.2 - "Connectify - Turn your PC into a Wi-Fi Hotspot and Get Faster Internet" http://www.connectify.me/"' & @CRLF
$aTmp = StringRegExp($sString, '(?si)\]\h(\d{1,3}(?:\.\d{1,3}){3}).*?"(.*?)".*?http://(?:www\.)?(.+?)/', 3)
$iUb = UBound($aTmp)
If Not $iUb Or Mod($iUb, 3) Then Exit 13
ReDim $aRes[$iUb / 3 + 1][3]
For $i = 0 To $iUb - 1 Step 3
    $aRes[0][0] += 1
    For $j = 0 To 2
        $aRes[$aRes[0][0]][$j] = $aTmp[$i + $j]
    Next
Next
$aTmp = 0
_ArrayDisplay($aRes)
 
Верх