我目前正在进行WSUS-Update自动化工作,我希望获得所有不以#34;(德语|英语)语言包开始的更新"。
这是我到目前为止所得到的:
[regex]$reg = "(?<!German|English|English \(United States\)) Language Pack"
$LanguagePacks = $updates.Where({ $_.Title -match $reg })
这有效,但我也得到如下更新: 适用于Windows 7(用于基于x64的系统)的Windows Internet Explorer 9语言包
但我也想用以下语法获取更新: [语言]语言包,例如芬兰语语言包
所以我尝试使用&#39; ^&#39; anchor来确定String的开头
[regex]$reg = "^(?<!German|English|English \(United States\)) Language Pack"
$LanguagePacks = $updates.Where({ $_.Title -match $reg })
但在这种情况下,结果为空:(
你有个主意吗?
Greetz Eldo.O
答案 0 :(得分:4)
您可以使用
(?<!^(?:German|English(?:\s+\(United States\))?)\s*)Language Pack
请参阅regex demo
如果字符串开头没有Language Pack
,German
或English
,则匹配English (United States)
。
<强>详情
(?<!
- 如果在当前位置的左侧立即出现模式,则启动一个未通过匹配的负面后视:
^
- 字符串开头(?:
- 交替非捕获组的开始:
German
- 文字子字符串|
- 或English
- 文字子字符串(?:\s+\(United States\))?
- 可选的非捕获组匹配1或0次出现:
\s+
- 一个或多个空格\(United States\)
- 文字(United States)
子字符串)
- 交替小组结束\s*
- 0+ whitespaces )
- 结束后面的Language Pack
- 文字子字符串