Eld*_*.Ob 2 regex powershell regex-negation regex-lookarounds
我目前正在研究 WSUS-Update 自动化,我想获取所有不以“(德语|英语)语言包”开头的更新。
这是我到目前为止得到的:
[regex]$reg = "(?<!German|English|English \(United States\)) Language Pack"
$LanguagePacks = $updates.Where({ $_.Title -match $reg })
Run Code Online (Sandbox Code Playgroud)
这有效,但我也得到了更新,例如:Windows Internet Explorer 9 Language Pack for Windows 7 for x64-based Systems
但我也想获得以下语法的更新:[Language] Language Pack eg Finnish Language Pack
所以我尝试使用 '^' 锚来确定字符串的开始
[regex]$reg = "^(?<!German|English|English \(United States\)) Language Pack"
$LanguagePacks = $updates.Where({ $_.Title -match $reg })
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,结果是空的:(
你有什么想法吗?
格雷茨·埃尔多
您可以使用
(?<!^(?:German|English(?:\s+\(United States\))?)\s*)Language Pack
Run Code Online (Sandbox Code Playgroud)
查看正则表达式演示
它匹配Language Pack,如果它之前没有用German,English或English (United States)在字符串的开始。
细节
(?<! - 如果在当前位置的左侧有以下模式,则匹配失败的负向后视的开始:
^ - 字符串的开始(?: - 交替非捕获组的开始:
German - 文字子串| - 或者English - 文字子串(?:\s+\(United States\))? - 一个可选的非捕获组匹配 1 或 0 次出现:
\s+ - 1 个或多个空格\(United States\)- 文字(United States)子串) - 交替组结束\s* - 0+ 个空格) - 回顾结束Language Pack - 文字子串| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |