Что нового

Регулярка доменных имен

eropov

Jury
Сообщения
195
Репутация
25
Здравствуйте. Помогите написать регулярное выражение для доменных имен.
Код:
Global $aDomain[100]
$sDomain = "http://yandex.ru/yandsearch?p=1&text=%D0%BE%D1%84%D0%B8%D1%81%D0%BD%D0%B0%D1%8F+%D0%BC%D0%B5%D0%B1%D0%B5%D0%BB%D1%8C&lr=65"
$oIE = _IECreate($sDomain, 1, 1)

Local $oTags_A = _IETagNameGetCollection($oIE, "a")
Local $i = 1
For $oTag_A In $oTags_A
	If $oTag_A.classname == "b-serp-url__link" Then
		If StringRegExp($oTag_A.innertext, "(([a-z0-9\-\.]+)?[a-z0-9\-]+(!?\.[a-z]{2,4}))") And $oTag_A.innertext <> 'images.yandex.ru'Then
			$aDomain[$i] = $oTag_A.innertext
			$i += 1
		EndIf
	EndIf
Next
_ArrayDisplay($aDomain)

Если запустить данный код, то получим массив, где 5, 10 и 12 элемент массива не доменное имя. Помогите написать регулярку правильно. Может, составить регулярное выражение, которое будет подходить к элементам массива(5, 10 и 12), а к остальным нет.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Самая простая это
Код:
'(?<=//)[^/\r\n]+'
если все URL являются изначально правильными.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
eropov
Код:
$test=StringRegExp($test, '(?s)(?:https?\:\/\/)(?:www\.)*((?:[^\s\/"<>%]*?\.)+[^\s\/"<>%]+)', 3)


При ложных срабатываниях добавляй запрещённый символ в набор. Ещё _ArrayUnique для удаления дубликатов.
 
Верх