好的,我有一系列的网址,如
http://www.test.com/sasa
http://www.test.com/sasdassasdssda
http://www.test.com/ewewewewsasa
http://www.test.com
我想要做的只是从每个网址的子字符串开始,从开头到第三个/如果没有第三个/取原始字符串
基本上我想知道如何获得第三个/的位置,因为我假设如果没有第三个/那么它将是-1所以我可以抓住位置并且如果它不是-1则执行子串位。 无论如何,我在漫无边际。如何找到第三个斜线的位置?
答案 0 :(得分: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
属性并从中创建一个新字符串(使其更简洁):
function Get-UriSchemeAndAuthority
{
param(
[string]$InputString
)
$Uri = $InputString -as [uri]
if($Uri){
return $("{0}://{1}" -f $Uri.Scheme,$Uri.Authority)
} else {
throw "Malformed URI"
}
}