2013-11-29 6 views
-1

У меня есть строка, содержащая URL-адрес, и мне нужно получить базовый URL-адрес.Regex Classic ASP

Строка у меня есть http://www.test.com/test-page/category.html

Я ищу RegEx, который позволит эффективно удалить любые имена страниц/папок в конце. Проблема в том, что некоторые люди могут войти в домен в следующих форматах:

http://www.test.com 
www.test.co.uk/ 
www.test.info/test-page.html 
www.test.gov/test-folder/test-page.html 

Она должна возвращать http://www.websitename.ext/ каждый раз, то есть доменное имя и расширение (например, .info .com .co.uk и т.п.) с прямой косой черты в конце.

Фактически ему необходимо вернуть базовый URL-адрес без имен страниц/папок. Есть ли простой способ сделать это с помощью регулярного выражения?

Спасибо.

+0

Существует способ сделать это с помощью регулярных выражений. Ты пробовал? Если нет, почему бы и нет? – Tomalak

ответ

1

Мой подход: Используйте RegEx извлечь доменное имя . Затем добавьте http: в начало и / до конца. Вот RegEx:

^(?:http:\/\/)?([\w_]+(?:\.[\w_]+)+)(?=(?:\/|$)) 

Также смотрите this answer на вопрос Extract root domain name from string. (Он оставил меня несколько неудовлетворили, хотя указал на необходимость учитывать https, номер порта и информация аутентификации пользователя, который мой RegEx делает не делать.)

Вот реализация в VBScript. Я поместил RegEx в константу и определил функцию с именем GetDomainName(). Вы должны быть в состоянии включить эту функцию на странице ASP, как это:

normalizedUrl = "http://" & GetDomainName(url) & "/" 

Вы также можете проверить мой сценарий из командной строки, сохраняя код в файл с именем test.vbs, а затем передать его в cscript:

cscript test.vbs 

Программа испытаний

Option Explicit 

Const REGEXPR = "^(?:http:\/\/)?([\w_]+(?:\.[\w_]+)+)(?=(?:\/|$))" 
'     ^^^^^^^^^ ^^^^^^ ^^^^^^^^^^  ^^^^ 
'      A   B1   B2   C 
' 
' A - An optional 'http://' scheme 
' B1 - Followed by one or more alpha-numeric characters 
' B2 - Followed optionally by one or more occurences of a string 
'  that begins with a period that is followed by 
'  one or more alphanumeric characters, and 
' C - Terminated by a slash or nothing. 

Function GetDomainName(sUrl) 
    Dim oRegex, oMatch, oMatches, oSubMatch 

    Set oRegex = New RegExp 
    oRegex.Pattern = REGEXPR 
    oRegex.IgnoreCase = True 
    oRegex.Global = False 
    Set oMatches = oRegex.Execute(sUrl) 

    If oMatches.Count > 0 Then 
     GetDomainName = oMatches(0).SubMatches(0) 
    Else 
     GetDomainName = "" 
    End If 
End Function 

Dim Data : Data = _ 
    Array(_ 
      "xhttp://www.test.com" _ 
      , "http://www..test.com" _ 
      , "http://www.test.com." _ 
      , "http://www.test.com" _ 
      , "www.test.co.uk/" _ 
      , "www.test.co.uk/?q=42" _ 
      , "www.test.info/test-page.html" _ 
      , "www.test.gov/test-folder/test-page.html" _ 
      , ".www.test.co.uk/" _ 
     ) 

Dim sUrl, sDomainName 
For Each sUrl In Data 
    sDomainName = GetDomainName(sUrl) 

    If sDomainName = "" Then 
     WScript.Echo "[ ] [" & sUrl & "]" 
    Else 
     WScript.Echo "[*] [" & sUrl & "] => [" & sDomainName & "]" 
    End If 
Next 

Expe cted Выход:

[ ] [xhttp://www.test.com] 
[ ] [http://www..test.com] 
[ ] [http://www.test.com.] 
[*] [http://www.test.com] => [www.test.com] 
[*] [www.test.co.uk/] => [www.test.co.uk] 
[*] [www.test.co.uk/?q=42] => [www.test.co.uk] 
[*] [www.test.info/test-page.html] => [www.test.info] 
[*] [www.test.gov/test-folder/test-page.html] => [www.test.gov] 
[ ] [.www.test.co.uk/] 
+0

Хороший, который работает - спасибо ;-) – techguy1988

0

Я не кодировал классический ASP за 12 лет, и это совершенно непроверено.

result = "http://" & Split(Replace(url, "http://",""),"/")(0) & "/"