You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复PowerShell Core 7中特定域名正则表达式匹配失败问题?

PowerShell Core 7正则表达式修复:匹配符合规则的三/四段主机地址

需求说明

需要编写正则表达式满足以下要求:

  • 匹配三或四段结构的主机地址
  • 最后两段必须是specificPartA.specificPartB或specificPartC.specificPartD其中之一
  • 前一段或两段前缀不能包含数字

匹配示例

  • foo.specificPartA.specificPartB - 匹配
  • foo.bar.specificPartA.specificPartB - 匹配
  • foo.specificPartC.specificPartD - 匹配
  • foo.bar.specificPartC.specificPartD - 匹配

不匹配示例

  • foo1.specificPartC.specificPartD - 不匹配(前缀含数字)
  • foo1.bar.specificPartC.specificPartD - 不匹配(前缀含数字)

当前问题

使用的正则表达式为:

"[^0-9]+\.[^0-9]+\.(specificPartA.specificPartB|specificPartC.specificPartD)"

测试三段域名(如foo.specificPartA.specificPartB)时返回不匹配,执行代码如下:

if ("foo.specificPartA.specificPartB" -match "[^0-9]+\.[^0-9]+\.(specificPartA.specificPartB|specificPartC.specificPartD)") { write-output "matches" } else { Write-Output "doesn't match" }

问题原因

原正则强制要求两段不含数字的前缀([^0-9]+\.[^0-9]+),但三段域名只有一段前缀,因此无法匹配。另外原正则未转义后缀中的点号(.在正则中是通配符,会匹配任意字符),也未限定字符串首尾,可能出现部分匹配的问题。

修复后的正则表达式

"^([^0-9]+\.)?[^0-9]+\.(specificPartA\.specificPartB|specificPartC\.specificPartD)$"

正则解析

  • ^:锚定字符串开头,避免从中间匹配
  • ([^0-9]+\.)?:可选的第一段前缀(不含数字,带点号),?表示该部分可出现0或1次,适配三段域名的情况
  • [^0-9]+:必填的一段前缀(不含数字),三段域名时是唯一前缀,四段时是第二段前缀
  • \.:转义后的点号,匹配实际的点分隔符
  • (specificPartA\.specificPartB|specificPartC\.specificPartD):精确匹配指定的后缀组合,点号同样需要转义
  • $:锚定字符串结尾,避免匹配更长字符串的一部分

测试验证

三段域名测试

if ("foo.specificPartA.specificPartB" -match "^([^0-9]+\.)?[^0-9]+\.(specificPartA\.specificPartB|specificPartC\.specificPartD)$") { write-output "matches" } else { Write-Output "doesn't match" }

输出:matches

四段域名测试

if ("foo.bar.specificPartC.specificPartD" -match "^([^0-9]+\.)?[^0-9]+\.(specificPartA\.specificPartB|specificPartC\.specificPartD)$") { write-output "matches" } else { Write-Output "doesn't match" }

输出:matches

含数字前缀测试

if ("foo1.specificPartC.specificPartD" -match "^([^0-9]+\.)?[^0-9]+\.(specificPartA\.specificPartB|specificPartC\.specificPartD)$") { write-output "matches" } else { Write-Output "doesn't match" }

输出:doesn't match

内容的提问来源于stack exchange,提问作者John Weirich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:57:11