Автор Тема: Отрицательный RegExp  (Прочитано 471 раз)

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

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн IIuOHeP [?]

  • Новичок
  • *
  • Сообщений: 21
  • Репутация: 2
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Отрицательный RegExp
« Создано: Июль 04, 2019, 10:55:23 »
Уважаемые форумчане прошу помощи сделать отрицательный 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, но мне нужен обратный эффект, посоветуйте как это сделать?
Код: AutoIt [Выделить]
#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" у меня не получается.

Код: AutoIt [Выделить]
#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)





« Последнее редактирование: Июль 04, 2019, 14:22:29 от IIuOHeP »

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

Отрицательный RegExp
« Отправлен: Июль 04, 2019, 10:55:23 »

Оффлайн hedji [?]

  • Продвинутый
  • ***
  • Сообщений: 377
  • Репутация: 72
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Отрицательный RegExp
« Ответ #1, Отправлен: Июль 04, 2019, 16:29:15 »
Конвертнуть имена в IP, если IP не из вашей подсети, значит это инет хост.
Код: AutoIt [Выделить]
$ip = TCPNameToIP("mail.yandex.ru")
$check = StringInStr($ip, "192.168.0")
If $check=0 Then
    ConsoleWrite("Alarm!!!")
EndIf
 


Оффлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 927
  • Репутация: 372
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Отрицательный RegExp
« Ответ #2, Отправлен: Июль 04, 2019, 16:39:27 »
Код: AutoIt [Выделить]
#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


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

Re: Отрицательный RegExp
« Ответ #2 Отправлен: Июль 04, 2019, 16:39:27 »

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 973
  • Репутация: 177
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Отрицательный RegExp
« Ответ #3, Отправлен: Июль 04, 2019, 18:35:15 »
Не силён в регулярных выражениях, но может так лучше :
Код: AutoIt [Выделить]
#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


Помечен как лучший ответ пользователем IIuOHeP Отправлен Июль 05, 2019, 10:30:55

Оффлайн IIuOHeP [?]

  • Новичок
  • *
  • Сообщений: 21

  • Автор темы
  • Репутация: 2
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Отрицательный RegExp
« Ответ #4, Отправлен: Июль 05, 2019, 10:30:35 »
Всем большое спасибо!  :)

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

Получился вот такой рабочий вариант:
Код: AutoIt [Выделить]
#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


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

Re: Отрицательный RegExp
« Ответ #4 Отправлен: Июль 05, 2019, 10:30:35 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
5221 Просмотров
Последний ответ Август 13, 2010, 19:08:52
от CreatoR
0 Ответов
5264 Просмотров
Последний ответ Сентябрь 12, 2010, 11:08:09
от damien2008
4 Ответов
4297 Просмотров
Последний ответ Сентябрь 15, 2010, 14:22:36
от Heler
9 Ответов
5708 Просмотров
Последний ответ Сентябрь 17, 2010, 01:11:10
от damien2008
23 Ответов
16140 Просмотров
Последний ответ Сентябрь 25, 2010, 10:42:18
от Kaster
6 Ответов
4473 Просмотров
Последний ответ Сентябрь 27, 2010, 15:49:38
от Heler
9 Ответов
5590 Просмотров
Последний ответ Сентябрь 30, 2010, 13:27:57
от MaxTyT
3 Ответов
6953 Просмотров
Последний ответ Март 25, 2012, 01:22:03
от asdf8
14 Ответов
7239 Просмотров
Последний ответ Июль 03, 2012, 00:48:36
от Garrett
4 Ответов
6183 Просмотров
Последний ответ Август 24, 2016, 13:27:30
от iltmpz