Perl RE检查用逗号分隔的字符串值

时间:2016-01-19 19:29:09

标签: regex perl

如何严格按照格式$message

检查CRs: <numbers separated by comma and a space>的值
 e.g:
 #good
 CRs: 1234, 2345, 6789 
 CRs: 54321

 #bad ones:
 CRs: 1234 2345 6789
 CRs: 1234 , 2345 , 6789
 CRs: 1234,2345,6789

我的RE不完整如下:

if ($message !~ m/CRs:\s+\d+,?/) {
      print "ERROR";
}

2 个答案:

答案 0 :(得分:4)

^CRs:\s+\d+(?:,\s+\d+)*$

使用锚点使字符串匹配。参见演示。

https://regex101.com/r/iJ7bT6/16

答案 1 :(得分:3)

您需要检查重复:

...
if ( $message !~ m/^CRs:\s+\d+(?:,\s+\d+)*$/ ) {
  print "ERROR";
}
...
非捕获组结束后

*表示匹配零次或多次

您还可以使用锚点^(行首)和$(行尾)确保您没有获得部分匹配。即123, 456, 789 aaaaaa在没有行结束锚的情况下有效。