相当愚蠢的问题,但我不知道如何做到这一点......
我从 获得操作系统名称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
Run Code Online (Sandbox Code Playgroud)
对 Regex 一窍不通……我该怎么做?
另外,是否有关于 Powershell 的 Regex 的很好的教程,您可以参考我吗?
您可以使用以下模式匹配字符串,如下所示:
$year = if( "Windows Server 2019" -match '\d{4}' ){
$matches[0]
}
Run Code Online (Sandbox Code Playgroud)
这通过使用-match运算符来检查是否找到了与模式(正则表达式)的匹配项。如果找到匹配项(-match返回$True或$False),则可以使用自动$matches数组查找与模式匹配的值。$matches[0]将包含匹配的值,任何附加元素都将表示匹配的捕获组作为更复杂表达式的一部分。
至于表达本身,\d指示要匹配一个数字字符和{4}一个量词,指出我们要匹配上正好是4的前述字符或令牌。
当然,如果-match返回$False上面,则$year不会设置一个值。
请注意,
-match如果您需要查找字符串中所有出现的模式,则该运算符不支持全局匹配。
您上面的用例不需要这样做,但是如果我们确实需要全局匹配选项,我们可以使用[Regex]::Matches此处的方法,该方法对输入字符串执行全局模式匹配:
$myString = "2019 2018 a clockwork orangutan 2017 2016"
[Regex]::Matches( $myString, '\d{4}' ).Value # => 2019
# 2018
# 2017
# 2016
Run Code Online (Sandbox Code Playgroud)
[Regex]::Matches返回一个System.Text.RegularExpressions.Match对象数组。该Value属性包含与模式匹配的实际字符串,但您也可以查看此对象的其他属性以了解更多信息,例如在字符串中找到模式匹配的索引。
至于关于正则表达式的“一个很好的教程”,我不能推荐一个,但我在编写和测试正则表达式时确实使用了https://regexr.com/。它不支持 .NET regex,但您可以将模式更改为 PCRE,这与 .NET regex 的工作方式非常接近。当您编写表达式时,它将分解您的表达式并解释每个字符(或特殊标记)的含义。您也可以使用一个不错的参考。