【发布时间】:2016-10-27 07:50:38
【问题描述】:
我正在搜索匹配任何字符串的正则表达式:
- 大于零的数字
- 号码至少有一位数字
- 不超过 12 位
我试过这个没有成功:
^[1-9][0-9]*{1,12}$
【问题讨论】:
-
你能有包含前导零但大于零的数字吗?
-
@SebastianProske 会很好,但不必那样。有趣的一点!
标签: regex
我正在搜索匹配任何字符串的正则表达式:
我试过这个没有成功:
^[1-9][0-9]*{1,12}$
【问题讨论】:
标签: regex
如果允许前导零大于零的数字,如果您使用的工具/语言支持前瞻,则可以使用^(?!0+$)[0-9]{1,12}$。前瞻用于确保数字不完全由零组成。
【讨论】:
^[1-9][0-9]{0,11}$
从 1-9 之间的单个数字开始,然后在 0-9 之间出现 0 到 11 次数字
【讨论】:
正则表达式的问题
^[1-9][0-9]*{1,12}$
是星号* 与{1,12} 一起用作星号*表示前一个符号的任意重复次数 而{1,12} 表示一到十二次重复 - 所以星号* 和{a,b} 不能混用,必须单独使用,不能一起使用。
【讨论】:
使用^[1-9]\d{0,11}$,它检查非零数字后跟零到 11 位数字。
您的正则表达式在第二个字符类之后有一个量词*,这将允许一个数字出现零次或多次(可能超过 11 个数字)。此外,量词 {1,12} 将前面模式的最小出现设置为 1,将最大出现设置为 12。因此,您必须避免使用 * 并将最小值和最大值分别设置为 0 和 11,因为已经存在单个数字的模式.
【讨论】: