Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.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
String PowerShell匹配字符串中的模式_String_Powershell - Fatal编程技术网

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表达式。以下是不重叠的发动机特定功能的大致列表: