Что нового

Обрезать ссылку, что бы остался только домен

Soderling

Новичок
Сообщения
25
Репутация
0
Доброго времени суток. Регулярные выражения - это просто высшая математика, буду рад помощи.

Задача: обрезать любую ссылку так, что бы оставалось имя домена

Ссылки могут быть вида:


Нужно сделать так, что бы оставалось site.ru

нужно получить значение между " http:// ; https:// ; http://www. ; https://www. " и первым символом " / "
 

Tempo

Скриптер
Сообщения
598
Репутация
192
Код:
#include <Array.au3>

example()

Func example()
    Local $aUrls[] = ['http://site.ru/post/date/date/', _
            'https://www.site.ru/post/date/date/', _
            'https://site.ru/post/date/date/', _
            'http://www.site.ru']

    _ArrayDisplay($aUrls, 'Before')
    For $i = 0 To UBound($aUrls) - 1
        $aUrls[$i] = StringRegExpReplace($aUrls[$i], '(?im)https?://(?:www\.)?(.+?)(?:/.*|$)', '\1')
    Next
    _ArrayDisplay($aUrls, 'After')
EndFunc   ;==>example
 
Последнее редактирование:
Автор
S

Soderling

Новичок
Сообщения
25
Репутация
0
Отлично работает! Но столкнулся с новой проблемой.
Почему так происходит и как исправить?

Код:
; Если получаю ссылку из строки браузера - не обрезается

   $oElement_url = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска")
   $URL = _UIA_ElementGetPropertyValue($oElement_url, "ValueValue")
   $URL = StringRegExpReplace($URL, '(?im)https?://(?:www\.)?(.+?)(?:/.*|$)', '\1')
   
   msgbox(64,'Сообщение', $URL)

; Если эту ссылку засунуть в переменную руками - работает


 $URL = "http://autoit-script.ru/threads/obrezat-ssylku-chto-by-ostalsja-tolko-domen.28082/#post-154387"
 $URL = StringRegExpReplace($URL, '(?im)https?://(?:www\.)?(.+?)(?:/.*|$)', '\1')

 msgbox(64,'Сообщение', $URL)
 

Tempo

Скриптер
Сообщения
598
Репутация
192
Из адресной строки вы в большинстве случаев получите ссылку без протокола
site.ru/post/date/date/
Код:
#include <Array.au3>

example()

Func example()
    Local $aUrls[] = ['http://site.ru/post/date/date/', _
            'https://www.site.ru/post/date/date/', _
            'https://site.ru/post/date/date/', _
            'http://www.site.ru', _
            'www.site.ru/date/date/', _
            'site.ru/date/date/']

    _ArrayDisplay($aUrls, 'Before')
    For $i = 0 To UBound($aUrls) - 1
        $aUrls[$i] = StringRegExpReplace($aUrls[$i], '(?im)(?:.+?://)?(?:www\.)?([^/]*).*', '\1')
    Next
    _ArrayDisplay($aUrls, 'After')
EndFunc   ;==>example
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,621
Репутация
2,441
Задача: обрезать любую ссылку так, что бы оставалось имя домена
Тут нужно уточнять, т.к доменное имя по сути может состоять из нескольких уровней, поэтому и my.site.ru тоже будет считаться именем домена.
Но как я понял в данном случае нужно получить имя домена 2-ого уровня (site.ru).
Также нужно учитывать что ссылка может содержать разные протоколы, поэтому любая ссылка может выглядеть и как ftp://site.ru (что в принципе учтено в последнем примере).

Код:
#include <Array.au3>

example()

Func example()
    Local $aUrls[] = _
        [ _
            'http://site.ru/post/date/date/', _
            'https://www.site.ru/post/date/date/', _
            'https://site.ru/post/date/date/', _
            'http://www.site.ru', _
            'ftp://www.site.ru/date/date/', _
            'ftp://my.site.ru/date/date/', _
            'www.site.ru/date/date/', _
            'site.ru/date/date/' _
        ]
  
    _ArrayDisplay($aUrls, 'Before')
    For $i = 0 To UBound($aUrls) - 1
        $aUrls[$i] = StringRegExpReplace($aUrls[$i], '(?i)^(?:.+://)?.*?([^\.]+\.[^/\.]+)(/.*|$)', '\1')
        ;Или так
        ;$aUrls[$i] = StringRegExpReplace($aUrls[$i], '(?i)^.*?([^\.:/]*\.[^/\.]*)(?:/.*)?$', '\1')
    Next
    _ArrayDisplay($aUrls, 'After')
EndFunc   ;==>example
 
Последнее редактирование:
Автор
S

Soderling

Новичок
Сообщения
25
Репутация
0
Честно говоря даже не подумал об этом)))
Сообщение автоматически объединено:

Доброго времени суток! Опять проблема возникла

Задача: Удалить все ссылки из массива, которые содержат доменное имя

К примеру сайт google , ниже скрин, там видно, что не все ссылки удаляются

Код:
$hPage = ControlGetHandle("[RegexpTitle: - Google Chrome]", "", "Chrome_RenderWidgetHostHWND1")
$oParent = _UIA_GetElementFromHandle($hPage)
$oElement_url = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска")
$URL = _UIA_ElementGetPropertyValue($oElement_url, "ValueValue")
$URL = StringRegExpReplace($URL, '(?i)^(?:.+://)?.*?([^\.]+\.[^/\.]+)(/.*|$)', '\1')
Local $All_link[0]
$All = _UIA_FindAllElements($oParent, "ControlType", $UIA_HyperlinkControlTypeId)
  For $i = 1 To $All[0]
    _Arrayadd($All_link, _UIA_ElementGetPropertyValue($All[$i], "Value.Value"))
  Next
  _ArrayDisplay($All_link)
  While 1
    $ind = _ArraySearch($All_link, $URL,0,0,0,1)
      If $ind <> -1 Then
        _ArrayDelete($All_link, $ind)
      Else
        exitloop
      EndIf
  Wend

_ArrayDisplay($All_link)

Сообщение автоматически объединено:

Извиняюсь, но проблема оказалась не в регулярке и тему наверно надо куда-нибудь перенести, но все же.

Вобщем решение нашел, думаю кривое, но работает ( кто понимает и его не затруднит, объясните пожалуйста почему стало работать)

Код:
$hPage = ControlGetHandle("[RegexpTitle: - Google Chrome]", "", "Chrome_RenderWidgetHostHWND1") ; 1 вариант ------ косяк кроется вот тут
; $hPage = WinWait(" - Google Chrome", "", 3)  ; 2 вариант ---- если сделать так то работает...                                                                                   
;Почему первый случай не работает, а второй работает?
$oParent = _UIA_GetElementFromHandle($hPage)
$oElement_url = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска")
$URL = _UIA_ElementGetPropertyValue($oElement_url, "ValueValue")
$URL = StringRegExpReplace[/URL]($URL, '(?i)^(?:.+://)?.*?([^\.]+\.[^/\.]+)(/.*|$)', '\1')
msgbox (64,'', $url )

1 случай $URL = 0
2 случай $URL = имя домена
почему в первом случае не получаем имя домена?
 

Вложения

  • 1.png
    1.png
    36.4 КБ · Просмотры: 6
Последнее редактирование:
Верх