如何修复我的正则表达式^\d+[-\d]?\d*以匹配123-45但不匹配123-?

3
我需要一个正则表达式来匹配以下格式的ID:
123 或 123-45
连字符前后可以有任意数量的数字。目前问题在于我的表达式会匹配到123-,但我不希望它这样匹配(连字符是可选的,但如果存在,则必须至少有一个数字在其后面)。
我已经尝试过^\d+[-\d+]?和^\d+[-\d]?\d*,但都没有成功。

1
@Dunnie - 这些标签并不是“不必要的标签” - 事实上,我们总是要求人们添加这些标签!如果正则表达式是使用 .Net 引擎,或在 Asp.Net 中用于验证,这对问题是相关的。 - Kobi
5个回答

9

试试这样:

^\d+(?:-\d+)?$

您希望至少有一个数字是可选的。 [-\d] 允许连字符或数字,后跟零个数字。在 ^\d+(?:-\d)?\d*$ 中也有类似的模式。
另请参阅:
- 捕获和非捕获组 - (...)(?:...) - 允许量词分组,如 ?。 - 字符类 - [...] - 允许从集合中选择单个字符。

2
这应该可以解决问题:
\d+(?:-\d+)?

1
正如Kobi所说,你差不多做对了,只是把方括号和圆括号搞混了。

0

如何使用:\d+-?

匹配所有数字并可选一个连字符。


0

尝试:

 ^\d+[-\d]?\d+

*替换为+会强制匹配前面的一个或多个元素,而不是零个或多个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接