Java RegExp用于单独的数字组

时间:2018-07-16 09:52:08

标签: java regex

我正在尝试编写一个正则表达式验证: 由|,(两者都可以组合)分隔的1到99之间的一组(或多个)数字

示例

必须接受:

1
10
1,2,3|5|10,20|30
1|5

必须拒绝:

1,
10,,
1,2,3!5

对于数字组,其直接输入:[1-9][0-9]。 对于其余部分,这仍然是个谜。

问题

有人可以协助提出正确的正则表达式吗?

2 个答案:

答案 0 :(得分:4)

^[1-9][0-9]?(?:[,|][1-9][0-9]?)*$

说明:

^            # Start of string
[1-9][0-9]?  # Match a number between 1 and 99
(?:          # Start of optional capturing group:
 [,|]        #  Match one separator
 [1-9][0-9]? #  and a number 1-99
)*           # any number of times (including 0)
$            # End of string

测试live on regex101.com

答案 1 :(得分:0)

\d([,|]?\d)*

可能是您表达的候选字,它表示至少要重复一个或多个数字,并用集合中的任何字符分隔(可选地,{{1}之后的?表示可选) {[,|]','}中的。

证明:

  • 叉指分隔符是可选的,因此两个分隔符之间可以有任意位数。这样可以使用任意长度的数字序列。
  • 数字之间最多可以有一个分隔符(分隔符是可选的,但必须后面跟一个数字)。
  • 由于正则表达式以数字开头,并强制以一个数字结尾,因此在字符串的开头或结尾都没有可接受的'|',

请参见demo进行测试。

注意

如果您想逐行接受它,拒绝以分隔符char开头或结尾的内容,只需将正则表达式锚定到|和{{1 }}。与demo2中一样。

^