Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell-从uri中提取子字符串_Powershell - Fatal编程技术网

Powershell-从uri中提取子字符串

Powershell-从uri中提取子字符串,powershell,Powershell,我正试着拉这个 hrbkr.com smqzc.com znynf.com 从$temp中的uri列表中,如下所示- anything.anything.hrbkr.com anything.anything.smqzc.com anything.anything.znynf.com 这个正则表达式似乎至少在regex101上匹配- (<domainname>(?<ip>^[A-Fa-f\d.:]+$)|(?<nodots>^[^.]+$)|(?<f

我正试着拉这个

hrbkr.com
smqzc.com
znynf.com
从$temp中的uri列表中,如下所示-

anything.anything.hrbkr.com
anything.anything.smqzc.com
anything.anything.znynf.com
这个正则表达式似乎至少在regex101上匹配-

(<domainname>(?<ip>^[A-Fa-f\d.:]+$)|(?<nodots>^[^.]+$)|(?<fqdomain>(?:(?:[^.]+.)?(?<tld>(?:[^.\s]{2})(?:(?:.[^\.\s][^\.\s])|(?:[^.\s]+)))))$)*?'
((?^[A-Fa-f\d.:]+$)|(?^[^.]+$)|(?(?:(?:[^.]+))(?(?:[^....\s]{2})(?:(?:(?:[^.[s]+])$)*?'
但这似乎并没有给我任何结果,我可以让它匹配整行,但如果行匹配,我只希望“substring”不是真的

$temp = ‘c:\Users\money\Downloads\phishinglist.txt’
$regex = '(<domainname>(?<ip>^[A-Fa-f\d.:]+$)|(?<nodots>^[^.]+$)|(?   <fqdomain>(?:(?:[^.]+.)?(?<tld>(?:[^.\s]{2})(?:(?:.[^\.\s][^\.\s])|(?:[^.\s]+)))))$)*?'
$temp | select-string -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } | Sort-Object -Unique > $list
$list
$temp='c:\Users\money\Downloads\phishinglist.txt'
$regex='(?^[A-Fa-f\d.:]+$)|(?^[^.]+$)|(?(?:(?:[^.]+)(?(?:[^...].{2})(?:(?:[^..[^.]s][^..]s])|(?:[^.[s]+))$)*?'
$temp | select string-Pattern$regex-AllMatches |%{$\.Matches}}{$\.Value}| Sort Object-Unique>$list
美元清单

谢谢

如果文件仅包含FQDN而不包含其他内容,则可以通过简单的
-split
-join
操作轻松解决此问题:

# Split FQDN into individual labels
$labels = 'anything.anything.smqzc.com' -split '\.'

# Grab second-to-last and last label, join with a dot
$domain = $labels[-2,-1] -join '.'
或者在一份声明中:

$domain = ("anything.anything.smqzc.com" -split '\.')[-2,-1] -join '.'
因此,您的过程最终看起来像:

$list = Get-Content $HOME\Downloads\phishinglist.txt |ForEach-Object {
    ($_ -split '\.')[-2,-1] -join '.'
}

如果文件仅包含FQDN而不包含其他内容,则可以通过简单的
-split
-join
操作轻松解决该问题:

# Split FQDN into individual labels
$labels = 'anything.anything.smqzc.com' -split '\.'

# Grab second-to-last and last label, join with a dot
$domain = $labels[-2,-1] -join '.'
或者在一份声明中:

$domain = ("anything.anything.smqzc.com" -split '\.')[-2,-1] -join '.'
因此,您的过程最终看起来像:

$list = Get-Content $HOME\Downloads\phishinglist.txt |ForEach-Object {
    ($_ -split '\.')[-2,-1] -join '.'
}

System.Uri类应该可以帮助您System.Uri类应该可以帮助您在域中使用一个前缀,如.com/net/org,但对于包含两个部分的前缀(如bbc.co.uk或ausregistry.com.auLooks),它不能正确返回,例如这是一个比我之前使用的更好的开始,我将添加一个带有tld数组的if语句,因此,如果它像@James C.建议的那样,它将抓住最后三个。否则,就抓住最后两个。我想那会有用的。。。非常感谢!!!当我想到它的时候,我会试着记住把它发回到这里。这对一个只有一个前缀的域来说是有效的,比如.com/net/org,但是对于一个有两个部分的前缀,比如bbc.co.uk或ausregistry.com.auLooks,这是一个比我有一个更好的开始,我会添加一个带有tld数组的if语句,因此,如果它像@James C.建议的那样,它将抓住最后三个。否则,就抓住最后两个。我想那会有用的。。。非常感谢!!!当我想到它的时候,我会尽量记住把它寄回这里。