我正在使用Powershell,并且想使用正则表达式来匹配某些东西。我有一个具有此命名约定的服务器列表-ABCPPsomename
。
因此,当正则表达式在名称中找到PP
时,我希望它包含在内。
但是,某些服务器的名称为ABCPRODsomenAppame
,并且由于名称中的App
,匹配项包括这些服务器。
我需要它,所以如果PP
是包含它的名称,并且不是它的名称,则不包含它。
另外,我需要包含ABCPPsomeAppname
的服务器名称
答案 0 :(得分:1)
IF(如果您对此不太清楚,则表示 if 为大),所有服务器的名称均以文字文本ABC
开头,那么是的,这并不难:< / p>
$servers = @('ABCPPsomename', 'ABCPRODsomenAppame', 'ABCPPsomeAppname')
$servers | Where-Object { $_ -match '^ABCPP' }
结果
ABCPPsomename
ABCPPsomeAppname
PP
或与PROD
完全不同的名称。
要仅在列表中找到"PP"
个服务器,可以尝试以下方法:
$servers = 'ABCPPsomename', 'ABCPRODsomenAppame', 'ABCPPsomeAppname'
$servers | Where-Object { $_ -match '^[A-Z]{3,5}PP' }
结果:
ABCPPsomename
ABCPPsomeAppname
正则表达式详细信息:
^ Assert position at the beginning of the string
[A-Z] Match a single character in the range between “A” and “Z”
{3,5} Between 3 and 5 times, as many times as possible, giving back as needed (greedy)
PP Match the characters “PP” literally
如果您需要区分大小写,请改用-cmatch
。
希望有帮助
答案 1 :(得分:1)
注意:此答案显示如何区分大小写 ,而这并不是OP想要的。
听起来您想匹配包含 substring PP
区分大小写的服务器名称,以便PP
匹配,但是{{ 1}}不会。
对于区分大小写的匹配,请使用App
运算符:
-cmatch
如果子字符串只能在某个位置匹配,则需要做更多的工作。
注意:
上面的命令直接在输入 array 上操作,并返回过滤后的数组。
如果要通过管道进行过滤,请参见Theo's Where-Object
-based answer。