4

假设我有一些字符串:

some50
some51/x
some52/y
some53/z
some510
some511/x
some512/y
some513/z

我想测试我的字符串是否为some+ 数字 + 任何形式。

我使用模式 : 来满足这个要求^some\d+,它返回了我所有的匹配项。

现在我需要排除一些数字。例如,我必须从匹配项中排除 51 和 52。正确的表达方式是什么?

我已经尝试过(我承认比尝试更多的是猜测):

  • ^some(\d+|(?!(51|52)))
  • ^some((\d+)(?!(51|52)))
  • ^some(\d+)^(?!(51|52)))
  • ^some(\d+)(?!(51|52)))

但他们都没有返回预期的结果,即:

some50
some53/z
some510
some511/x
some512/y
some513/z

PS:不知道是否重要,但正则表达式在 PowerShell 脚本中使用。

[编辑]扩展问题以表明不应排除 51x

4

2 回答 2

4

您正在寻找一个否定的前瞻断言。我不熟悉 PowerShell 脚本,但在 perl 兼容的正则表达式中,这有效:

^some(?!(51$|52$))\d+$

这也将不匹配some510。如果这不是故意的,请删除$after5152

更新:从字符串边界更改为单词边界(在字符串的末尾)

^some(?!(51\b|52\b))\d+\b
于 2012-09-21T14:01:39.350 回答
-1

这是一种方式,可能不是最优雅的: ^some([0-46-9]\d*|5([03-9]|\d\d+)|5)

于 2012-09-21T14:01:49.107 回答