我试图编写一个正则表达式来检查字符串是否匹配带有正整数的非空CSV模式,例如34,657547,453,346654
,还有{{1}这样的单个整数}或2
。
我尝试3943
作为正则表达式(如this SO-question中所述并删除允许空字符串的部分),但如果我在https://regex101.com/上尝试使用我的示例输入{ {1}}它告诉我唯一的匹配是^\d+(,\d+)*$
。如果我尝试34,657547,453,346654
,则表示没有匹配
根据我的理解:
,346654
所以我也有问题:
34
或^ // Start of String
\d+ // A digit, at least one time
( ...) // Grouping for the next
,\d+ // a comma and at least one digit
* // Repeating the grouping zero to unlimited times
$ // End of String
无效。我考虑在我的正则表达式中使用34,0,354
而不是0
,但这样可以删除像[1-9]
这样的数字。最后,我想到了一个包含这样一个函数的脚本:
\d
答案 0 :(得分:1)
正如ClasG在评论中指出的那样,你的正则表达式正在发挥作用。它确实匹配整条线,只捕获匹配的las标记。小组(,\d+)*
会在重复时被覆盖。
要排除匹配的0
令牌,您可以使用以下表达式:
/^0*[1-9]\d*(?:,0*[1-9]\d*)*$/
如您所见,对于每个数字,它匹配:
0* # any number of leading zeros
[1-9] # requires 1 digit different than 0
\d* # any number of digits
还有一件事,你要检查是否preg_match($regEx, $string) > 1
。但是,如果匹配,则preg_match
仅返回1
,否则返回0
(我们不使用偏移量)。你可以简单地返回值:
return preg_match($regEx, $string);