首页 > 解决方案 > 字符串中间带有通配符的正则表达式

问题描述

我有来自不同用户的 [HKEY_CURRENT_USER\Printers\Connections] 的大量注册表导出。此文件包含多行带有“

[HKEY_CURRENT_USER\Printers\Connections\,,BBPRINTER01.domain.local,AG-printer-S4]

我需要的BBPRINTER01.domain.local,AG-printer-S4部分。问题是,BBPRINTER01andAG-printer-S4可以不同。

所以我需要一个正则表达式,它从 .domain.local 中提取“ .domain.local[HKEY_CURRENT_USER\Printers\Connections\,,BBPRINTER01.domain.local,AG-printer-S4]

而且我没有任何线索来生成这个:(

(?<=\[)(.*)(?=\])我可以得到所有东西,包括但[]我不知道如何只从上面获取通配符字符串。

标签: regexstringpowershellwildcard

解决方案


您可以使用以下方法将子字符串捕获到第 1 组中

\[[^][]*?(\w+\.domain\.local,[^][]*)]

请参阅此正则表达式演示。它匹配

  • \[- 一个[字符
  • [^][]*?- 0+ 个字符[]尽可能少
  • (- 捕获组 1 的开始
  • \w+- 一个或多个字母/数字/_
  • \.domain\.local,- 一个.domain.local,字符串
  • [^\]\[]*- 0 个或多个字符,而不是]and[
  • )捕获组结束
  • ]- 一个]字符。

在 PowerShell 中,使用

$result = Get-Content $file | Select-String -Pattern '\w+\.domain\.local,[^][]*'
if ($result.Matches.Success) { $result.Matches.Groups[1].Value }
# => BBPRINTER01.domain.local,AG-printer-S4

PowerShell 测试:

在此处输入图像描述


推荐阅读