Что нового

Отрицательный RegExp

IIuOHeP

Новичок
Сообщения
21
Репутация
2
Уважаемые форумчане прошу помощи сделать отрицательный regexp.

Есть доменные имена:
- локальных компьютеров;
comp1
Comp-fw
- доменных;
company.mydomain.ru
mail.mydomain.com
-сети интернет.
mail.yandex.ru
test.google.com

Нужно регулярное выражение, которое выполнялось, если доменное имя из сети интернет.
т.е. в приведенных примерах игнорировало имена "comp1", "Comp-fw", "company.mydomain.ru", "mail.mydomain.com", для всех прочих доменов regexp должен выполняться.

У меня получилось сделать положительный RegExp, но мне нужен обратный эффект, посоветуйте как это сделать?
Код:
#include <Array.au3>

;~ $domainname = 'comp1'
;~ $domainname = 'Comp-fw'
;~ $domainname = 'company.mydomain.ru'
;~ $domainname = 'mail.mydomain.com'
$domainname = 'mail.yandex.ru'
;~ $domainname = 'www.google.com'

$regexp = '^(?:^.*?\.mydomain\.ru|.*?\.mydomain\.com|^[0-9a-zA-Z-]+$)$'
$aReg = StringRegExp($domainname,$regexp,3)
if IsArray($aReg) Then _ArrayDisplay($aReg)


P.S. отрицательный Regexp у меня получилось сделать по доменным именам "company.mydomain.ru" и "mail.mydomain.com":
Но добавить игнорирование имен "comp1" и "Comp-fw" у меня не получается.

Код:
#include <Array.au3>
;~ $domainname = 'comp1'
$domainname = 'Comp-fw'
;~ $domainname = 'company.mydomain.ru'
;~ $domainname = 'mail.mydomain.com'
;~ $domainname = 'mail.yandex.ru'
;~ $domainname = 'www.google.com'

$regexp = '^(?>.(?!\.mydomain\.ru|.*?\.mydomain\.com))+$'
$aReg = StringRegExp($domainname,$regexp,3)
if IsArray($aReg) Then _ArrayDisplay($aReg)
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Конвертнуть имена в IP, если IP не из вашей подсети, значит это инет хост.
Код:
$ip = TCPNameToIP("mail.yandex.ru")
$check = StringInStr($ip, "192.168.0")
If $check=0 Then
    ConsoleWrite("Alarm!!!")
EndIf
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include <Array.au3>
$domainname = 'comp1'& @CRLF
$domainname &= 'Comp-fw'& @CRLF
$domainname &='company.mydomain.ru'& @CRLF
$domainname &='mail.mydomain.com'& @CRLF
$domainname &= 'mail.yandex.ru'& @CRLF
$domainname &='www.google.com'& @CRLF

$regexp = '(?m)^(?:(?!\.mydomain(?:\.ru|\.com)|comp1|Comp-fw).)+[\r\n]+'
$aReg = StringRegExp($domainname,$regexp,3)
if IsArray($aReg) Then _ArrayDisplay($aReg)
Exit
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Не силён в регулярных выражениях, но может так лучше :
Код:
#include <Array.au3>
$domainname = 'comp1'& @CRLF
$domainname &= 'Comp-fw'& @CRLF
$domainname &='company.mydomain.ru'& @CRLF
$domainname &='mail.mydomain.com'& @CRLF
$domainname &= 'mail.yandex.ru'& @CRLF
$domainname &='www.google.com'& @CRLF

$regexp = '(\S+\.\S+[^mydomain]\.\S+)'
$aReg = StringRegExp($domainname,$regexp,3)
if IsArray($aReg) Then _ArrayDisplay($aReg)
Exit
 
Автор
I

IIuOHeP

Новичок
Сообщения
21
Репутация
2
Всем большое спасибо! :smile:

"sngr" - взял Ваш вариант за основу.

Получился вот такой рабочий вариант:
Код:
#include <Array.au3>
$domainname = 'comp1'&@CRLF
$domainname &='Comp-fw'&@CRLF
$domainname &='CoMpfw001'&@CRLF
$domainname &='company.mydomain.ru'&@CRLF
$domainname &='mail.mydomain.com'&@CRLF
$domainname &='mail.newmydomain.com'&@CRLF
$domainname &='mail.yandex.ru'&@CRLF
$domainname &='mai-l.yandex.ru'&@CRLF
$domainname &='www.google.com'&@CRLF
$domainname &='robot.dom.com'&@CRLF
$domainname &='mydomain.dom.com'&@CRLF

$regexp = '(?m)^(?:(?!\.mydomain(?:\.ru|\.com|\.net)|\.newmydomain(?:\.ru|\.com|\.net)|^[a-zA-Z0-9-]+$).)+$'
$aReg = StringRegExp($domainname,$regexp,3)
if IsArray($aReg) Then _ArrayDisplay($aReg)
Exit
 
Верх