假设我有一些字符串:
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
答案 0 :(得分:4)
您正在寻找负面的前瞻断言。我不熟悉PowerShell脚本,但在perl兼容的正则表达式中,这有效:
^some(?!(51$|52$))\d+$
这也与some510
不匹配。如果不是这样,请在$
和51
后删除52
更新:从字符串边界更改为字边界(在字符串的末尾)
^some(?!(51\b|52\b))\d+\b
答案 1 :(得分:-1)
这是一种方式,可能不是最优雅的方式:
^some([0-46-9]\d*|5([03-9]|\d\d+)|5)