逗号分隔1-9999正则表达式之间的整数

时间:2016-07-19 13:58:58

标签: regex string pattern-matching

我正在努力想出一个用逗号分隔的整数列表的正则表达式,范围在1-9999之间。

这是我到目前为止所做的:

"(^[1-9][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[1-9](,[1-9][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[1-9])*)$"

我不想允许空格而且不应以逗号结尾,所以应该只允许:

1,2,9999
1
43,5

2 个答案:

答案 0 :(得分:5)

1到9999之间的整数可与

匹配
(?:[1-9]|[1-9][0-9]{1,3})

同义
[1-9][0-9]{0,3}

详细

  • [1-9] - 来自1-9范围
  • 的数字
  • | - 或
  • [1-9][0-9]{1,3} - 从109999的整数。

  • [1-9] - 来自1-9范围
  • 的数字
  • [0-9]{0,3} - 任意0到3位数字

因此,用逗号分隔的整数列表可以表示为:

\A(?:[1-9]|[1-9][0-9]{1,3})(?:,(?:[1-9]|[1-9][0-9]{1,3}))*\z

或更短的版本

\A[1-9][0-9]{0,3}(?:,[1-9][0-9]{0,3})*\z

这是regex demo

<强>解释

  • \A - 明确的字符串开头
  • [1-9][0-9]{0,3} - 整数正则表达式块
  • (?: - 非匹配组的开头,它将匹配0个或更多个序列:
    • , - 逗号
    • [1-9][0-9]{0,3} - 1直到9999整数正则表达式块
  • )* - 非捕获组的结束
  • \z - 字符串的明确非常结尾。

在Swift或Objective C字符串模式中,您需要加倍反斜杠,例如

夫特:

var pattern = "\\A[1-9][0-9]{0,3}(?:,[1-9][0-9]{0,3})*\\z"

目标C:

NSString * pattern = @"\\A[1-9][0-9]{0,3}(?:,[1-9][0-9]{0,3})*\\z";

由于您需要验证字符串,因此您需要使用明确的锚点\A\z。请注意,$匹配字符串,即使它以LF符号结尾,因此,建议使用字符串锚\z的最末端。

修改

为了证明以下那些不相信上述Objective-C模式不起作用的人,这里有一个demo

NSString * teststr = @"1,4,566";
NSString * pattern = @"\\A[1-9][0-9]{0,3}(?:,[1-9][0-9]{0,3})*\\z";
NSPredicate * tst = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
if ([tst evaluateWithObject:teststr]) {
   NSLog (@"yes");
}
else
{
   NSLog (@"no");
}

结果:yes

答案 1 :(得分:0)

这是我的服务:

^[0-9]([0-9\,]{0,2}[0-9]|[0-9]{0,3})?

查看匹配here