2015-07-22 2 views
1

Ok поэтому у меня есть ряд адресов, начиная от чего-то, какрегулярного выражения, подстрока URL от начала до 3 одного определенного символа

http://www.test.com/sasa 
http://www.test.com/sasdassasdssda 
http://www.test.com/ewewewewsasa 
http://www.test.com 

То, что я хочу сделать, это просто взять подстроку каждого url, который идет от начала до третьего /, и если нет третьего/взять исходную строку

В основном я хочу знать, как получить позицию третьего /, поскольку я предполагаю, что нет третьего/тогда он будет -1, поэтому я могу просто захватить позицию, а если не -1, то бит подстроки. В любом случае меня достаточно бессвязно. Как найти позицию третьей косой черты?

+0

Вы можете использовать '^ ([^ /] * /) {2} [^ /] *' regex. –

ответ

2

Похоже, что вы хотите URI без пути (отрезок после третьего /) и конечный /.

Самый простой способ сделать это, просто, чтобы преобразовать строку в реальный объект URI, а затем использовать AbsoluteUri и PathAndQuery свойства вычислить где сделать для разреза:

function Get-UriSchemeAndAuthority 
{ 
    param(
     [string]$InputString 
    ) 

    $Uri = $InputString -as [uri] 
    if($Uri){ 
     $FullUri = $Uri.AbsoluteUri 
     $Path = $Uri.PathAndQuery 

     $SlashIndex = $FullUri.Length - $Path.Length 

     return $FullUri.Substring(0,$SlashIndex) 
    } else { 
     throw "Malformed URI" 
    } 
} 

Работает со всеми своими тестовые:

PS C:\> Get-UriSchemeAndAuthority http://www.test.com/sasa 
http://www.test.com 
PS C:\> Get-UriSchemeAndAuthority http://www.test.com/sasdassasdssda 
http://www.test.com 
PS C:\> Get-UriSchemeAndAuthority http://www.test.com/ewewewewsasa 
http://www.test.com 
PS C:\> Get-UriSchemeAndAuthority http://www.test.com 
http://www.test.com 

Альтернативно, возьмите Scheme и Authority свойства и создать новый Strin g из них (делает его более кратким):

function Get-UriSchemeAndAuthority 
{ 
    param(
     [string]$InputString 
    ) 

    $Uri = $InputString -as [uri] 
    if($Uri){ 
     return $("{0}://{1}" -f $Uri.Scheme,$Uri.Authority) 
    } else { 
     throw "Malformed URI" 
    } 
} 
Смежные вопросы