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)
可以匹配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
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |