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

Jim*_*Jam 0 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])*)$"
Run Code Online (Sandbox Code Playgroud)

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

1,2,9999
1
43,5
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

可以匹配1到9999之间的整数

(?:[1-9]|[1-9][0-9]{1,3})
Run Code Online (Sandbox Code Playgroud)

这是同义词

[1-9][0-9]{0,3}
Run Code Online (Sandbox Code Playgroud)

细节:

  • [1-9]- 1-9范围内的数字
  • | - 要么
  • [1-9][0-9]{1,3} - 从10直到的整数9999.

要么

  • [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
Run Code Online (Sandbox Code Playgroud)

或更短的版本

\A[1-9][0-9]{0,3}(?:,[1-9][0-9]{0,3})*\z
Run Code Online (Sandbox Code Playgroud)

这是一个正则表达式演示

说明:

  • \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"
Run Code Online (Sandbox Code Playgroud)

目标C:

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

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

编辑:

为了证明下面那些不相信上面的Objective-C模式不起作用的人,这里是一个演示:

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");
}
Run Code Online (Sandbox Code Playgroud)

结果: yes