PowerShell:将URL从字符串中拉出



我正在从外观的文本文件中摘下字符串:

C:UsersusersDocumentsFirefoxtoolsInstall.ps1:37:    Url = "https://somewebsite.com"

我需要如何删除除URL以外的所有内容,因此应该看起来像:

https://www.somewebsite.com

这是我尝试过的:

$Urlselect = Select-String -Path "$zipPathtoolschocolateyInstall.ps1"  -Pattern "url","Url"-List # Selects URL download path
$Urlselect = $Urlselect -replace ".*" ","" -replace ""*.","" # remove everything but the download link

,但这并没有做任何事情。我认为它将与Regex有关,但我不确定如何提出。任何帮助都将受到赞赏。谢谢

我建议使用 -Regex-File选项使用switch语句:

$url = switch -regex -file "$zipPathtoolschocolateyInstall.ps1" { 
  ' Url = "(.*?)"' { $Matches[1]; break } 
}
  • -file在指定文件的所有行上制造 switch循环。
  • -regex将分支条件解释为正则表达式,并且可以在关联的脚本块({ ... })中使用自动$Matches变量,以访问比赛的结果,尤其是Regex中的第1(和唯一)捕获组((...))被捕获的 - 感兴趣的URL。
  • break找到了第一个匹配项后停止处理。(要继续匹配,请使用continue)。

如果您想使用Select-String

$url = Select-String -List ' Url = "(.*?)"' "$zipPathtoolschocolateyInstall.ps1" |
  ForEach-Object { $_.Matches.Groups[1].Value }

请注意,switch解决方案的性能会更好。


至于您尝试过的

Select-String -Path "$zipPathtoolschocolateyInstall.ps1" -Pattern "url","Url"

Select-String默认情况下是案例 - 不敏感,因此无需指定同一字符串的情况变化。(相反,您必须使用-CaseSensitive开关来强制case-敏感匹配)。

还请注意,Select-String不会以A String 而直接输出匹配行,而是作为匹配信息对象;要获取匹配行,请访问.Line属性 [1]

$Urlselect -replace ".*" ","" -replace ""*.",""

".*" """*."语法错误中导致,因为您忘记了 easce _embedded " as `"

另外,使用'...'(单引号字面字符串),它允许您嵌入" AS-IS,通常比以后和替换操作数更可取,因为在哪些部分powershell可能不会混淆的情况下,向上解释(字符串扩展)。

即使解决了解决问题,您的-replace操作也无法使用,因为.*"匹配了贪婪,因此直到最后 last ";这是使用 non-greedy 匹配的校正解决方案,并且省略了替换操作数(这使其默认为空字符串):

PS> 'C:...ps1:37: Url = "https://somewebsite.com"' -replace '^.*?"' -replace '"$'
https://somewebsite.com
  • ^.*?"非固定地将所有内容替换为 "
  • "$在字符串末端替换"

但是,您可以使用 -replace操作进行操作,使用与顶部的switch解决方案相同的正则

PS> 'C:...ps1:37: Url = "https://somewebsite.com"' -replace '^.*?"(.*?)"', '$1'
https://somewebsite.com

$1在替换操作数中,指的是第一个捕获组((...))捕获的内容,即裸露的URL;有关更多信息,请参阅此答案。


[1]请注意,有一个绿色功能建议 - 尚未使用Windows PowerShell Core 6.2.0实现 - 允许Select-String直接使用建议的-Raw Switch直接发射字符串 - 请参阅https://https://github.com/powershell/powershell/issues/7713

相关内容

  • 没有找到相关文章

最新更新