我如何编写一个正则表达式,它将检查字符串是否以数字开头和结尾以及在两者之间仅包含数字和逗号?逗号也必须彼此分开至少一位数字。对于上述条件,我有以下正则表达式:^\d(,?\d)*$
,但还有以下附加条件:由数字序列组成的所有逗号分隔的整数必须彼此不同。只允许这种字符串的正则表达式是什么?
谢谢
答案 0 :(得分:1)
首先,您的正则表达式包含未量化的\d
,并且仅匹配一位数字。您需要在+
之后添加\d
,以匹配1个或多个数字。
为避免重复值,可以使用
^(?!.*\b(\d+)\b.*\b\1\b)\d+(?:,\d+)*$
^^^^^^^^^^^^^^^^^^^^^^^
请参见regex demo
(?!.*\b(\d+)\b.*\b\1\b)
是一个否定的超前查询,如果在除换行符以外的任何0+字符之后,字符串后面出现的一组数字(在除0以外的另外0个字符之后出现,则匹配失败)换行符)。
详细信息
^
-字符串的开头(?!.*\b(\d+)\b.*\b\1\b)
-如果文本中出现相同的值,则负向搜索将使匹配失败\d+
-1个以上数字(?:,\d+)*
-出现零次或多次
,
-逗号\d+
-1个以上数字$
-字符串的结尾。