如何在PowerShell中匹配字符串

问题描述

我正在尝试在PowerShell中匹配字符串,但无法获取True。

"one.two" -match "One Two"
False

好吧,也许我提供的问题信息太有限了。 因此,这里有更多信息。我有以下代码

$userRoles = @('User','Customer Support');
$adGroups = @('ad.group.user','ad.group.customer.admin');
$userRoletoAdGroup = @{};
foreach ($userRole in $userRoles) {
    $adGroupsMatch = @($adGroups -match "$userRole")
    $userRoletoAdGroup.Add($userRole,$adGroupsMatch)
}
$userRoletoAdGroup

对于客户支持输出值为空。

解决方法

此处“一”和“二”之间的空格将按字面匹配“一二”。如果要匹配它们之间的任何字符,请使用:

"one.two" -match "One.Two"

在正则表达式.中的含义是任何字符。或者您可以追加

* = 0 or more instances of previous charcter
+ = 1 or more instances of previous charcter
? = 0 or 1 instances of previous charcter
\w = match any word
\d = match any digit
\s = match any whitespace
{n,m} = match n to m instances of previous charcter
,

我不确定您要实现的目标,但您应该了解PowerShell语法和-match运算符。

匹配正则表达式时,匹配Customer Support这样的角色名称实际上只是匹配相同的字符串。使该匹配 like 通配符的一种方法是

$String = "Customer Support"
$MatchString = "($($String -replace '\s+','|'))"
'ad.group.customer.admin' -match $MatchString
True

此代码将$String中的所有空格分割并将其合并到合法的正则表达式查询"(Customer|Support)"中。

注意

此代码将匹配其中包含单词“ customer”和/或“ support”的任何字符串。

'ad.group.user.support' -match $MatchString
True