pwsh7 URL 正则表达式需要帮助

问题描述 投票:0回答:1

我正在编写一个powershell core 7脚本,在Windows环境中运行。

正则表达式的要求:

  1. 三部分或四部分主机地址
  2. 最后两个部分可以是以下两个选项之一:specicPartA.specicPartB -或- SpecificPartC.specicPartD,因此最后两个部分必须是两个已知值之一。
  3. 前一两部分不能包含任何数字。

示例:

  • foo.specificPartA.specificPartB - 匹配
  • foo.bar.specificPartA.specificPartB - 匹配
  • foo.speciesPartC.speciesPartD - 匹配
  • foo.bar.specificPartC.specificPartD - 匹配
  • foo1.specialPartC.specificPartD - 由于数字(三个部分)不匹配
  • foo1.bar.specialPartC.specificPartD - 由于数字(四个部分)不匹配

当前正则表达式:

"[^0-9]+\.[^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" }

3 部分应该匹配但不匹配。

请问我该如何解决?

我正在运行 pwsh 终端的变体来测试我的正则表达式:

if ("foo.specificPartA.specificPartB" -match "[^0-9]+\.[^0-9]+\.(specificPartA.specificPartB|specificPartC.specificPartD)") { write-output "matches" } else { Write-Output "doesn't match" }
regex powershell-core
1个回答
0
投票

您可以断言字符串的开头,然后匹配除数字或点之外的 1 个以上字符,然后匹配一个点。

然后您可以选择为第二部分匹配相同的模式。

如果您只想匹配,则不需要捕获组,并且必须转义点才能按字面匹配。

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

查看正则表达式演示

© www.soinside.com 2019 - 2024. All rights reserved.