gpt4 book ai didi

string - PowerShell 匹配字符串中的模式

转载 作者:行者123 更新时间:2023-12-03 00:32:16 26 4
gpt4 key购买 nike

这是一个非常愚蠢的问题,但我不知道该怎么做....

我从 Get-ADComputer 获取操作系统名称,比方说:“Windows Server 2012 R2 Standard”。

我试图只选择构建中的年份,例如:

"Windows Server 2012 R2 Standard" > 2012
"Windows Server 2019" > 2019
"Windows Server 2008" > 2008
"Windows Server 2008 R2" > 2008

对正则表达式一无所知……我该怎么做?

另外,有没有关于 Powershell Regex 的好教程可以推荐给我?

最佳答案

您可以像这样使用以下模式匹配字符串:

$year = if( "Windows Server 2019" -match '\d{4}' ){
$matches[0]
}

这通过使用 -match 运算符检查是否找到与模式(正则表达式)的匹配来工作。如果找到匹配项(-match 返回 $True$False),则可以使用自动 $matches 数组以查找与模式匹配的值。 $matches[0] 将包含匹配的值,任何其他元素都将表示匹配的捕获组作为更复杂表达式的一部分。

对于表达式本身,\d 表示匹配一个数字字符,{4} 是一个量词,表示我们要匹配 恰好 4 前面的字符或标记。

当然,如果上面的-match返回$False,那么$year就不会被设置值。

Note that the -match operator does not support global matching if you ever needed to find all occurrences of a pattern in a string.

但是如果我需要匹配字符串中出现的所有模式怎么办?

你上面的用例不需要这个,但如果我们确实需要一个全局匹配选项,我们可以在这里使用 [Regex]::Matches 方法,它执行一个全局模式匹配在输入字符串上:

$myString = "2019 2018 a clockwork orangutan 2017 2016"
[Regex]::Matches( $myString, '\d{4}' ).Value # => 2019
# 2018
# 2017
# 2016

[Regex]::Matches 返回 System.Text.RegularExpressions.Match 的数组对象。 Value 属性包含与模式匹配的实际字符串,但您也可以查看此对象的其他属性以了解更多信息,例如找到模式匹配的字符串中的哪个索引在,例如。

一个很好的正则表达式资源

至于正则表达式的“一个很好的教程”,我不能推荐一个,但我确实使用了 https://regexr.com/在编写和测试正则表达式时。它不支持 .NET 正则表达式,但您可以将模式更改为 PCRE,它与 .NET 正则表达式的工作方式非常接近。在您编写表达式时,它会分解您的表达式并解释每个字符(或特殊标记)的含义。您也可以使用一个不错的引用。

关于string - PowerShell 匹配字符串中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59071917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com