String PowerShell匹配字符串中的模式
这是个很愚蠢的问题,但我想不出怎么做 我从String PowerShell匹配字符串中的模式,string,powershell,String,Powershell,这是个很愚蠢的问题,但我想不出怎么做 我从get-ADComputer获取操作系统名称,比如说:“Windows Server 2012 R2标准版” 我试图在构建中选择年份,例如: "Windows Server 2012 R2 Standard" > 2012 "Windows Server 2019" > 2019 "Windows Server 2008" > 2008 "Windows Server 2008 R2" > 2008 对正则表达式一无所知…我怎么
get-ADComputer
获取操作系统名称,比如说:“Windows Server 2012 R2标准版”
我试图在构建中选择年份,例如:
"Windows Server 2012 R2 Standard" > 2012
"Windows Server 2019" > 2019
"Windows Server 2008" > 2008
"Windows Server 2008 R2" > 2008
对正则表达式一无所知…我怎么能做到呢
另外,是否有关于Powershell的正则表达式的好教程可供参考?您可以使用以下模式在字符串上进行匹配:
$year = if( "Windows Server 2019" -match '\d{4}' ){
$matches[0]
}
这是通过使用-match
操作符检查是否找到与模式(regex)匹配的项来实现的。如果找到匹配项(-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
[Regex]:Matches
返回一个对象数组。Value
属性包含与模式匹配的实际字符串,但您也可以查看此对象的其他属性以了解更多信息,例如,在字符串中找到模式匹配的索引
一个好的正则表达式资源
至于正则表达式的“好教程”,我不能推荐,但我确实在编写和测试正则表达式时利用了它。它不支持.NET正则表达式,但您可以将模式更改为PCRE,这与.NET正则表达式的工作方式非常接近。在编写表达式时,它将分解表达式并解释每个字符(或特殊标记)的含义。还有一个不错的参考,你也可以使用。
“Windows Server 2012 R2标准”-匹配“\d{4}”
适用于任何语言。你也可以在Vivek建议的match
语句之后测试你的正则表达式,你的结果应该是$Matches。value
@Sid只正式支持Javascript和PCRE正则表达式。也就是说,.NET正则表达式与PCRE非常接近,我还没有找到一个在.NET引擎中不起作用的PCRE表达式。以下是不重叠的发动机特定功能的大致列表: