Regex 正则表达式检查以前的组
我写正则表达式有困难。以下是我的规则: 可以是0到10个数字,用逗号分隔。 每个数字都介于0和2000之间(含0和2000)。 在这个模式中不应该有重复的数字(这是棘手的部分)。 这是我试过的怪物:Regex 正则表达式检查以前的组,regex,Regex,我写正则表达式有困难。以下是我的规则: 可以是0到10个数字,用逗号分隔。 每个数字都介于0和2000之间(含0和2000)。 在这个模式中不应该有重复的数字(这是棘手的部分)。 这是我试过的怪物: ^([1-9][0-9]{0,2}|1[0-9]{3}|2000)(,(?!\1)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3|\5)([1-9][0
^([1-9][0-9]{0,2}|1[0-9]{3}|2000)(,(?!\1)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3|\5)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3|\5|\7)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3|\5|\7|\9)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3|\5|\7|\9|\11)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3|\5|\7|\9|\11|\13)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3|\5|\7|\9|\11|\13|\15)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}(,(?!\1|\3|\5|\7|\9|\11|\13|\15|\17)([1-9][0-9]{0,2}|1[0-9]{3}|2000)){0,1}$
在字符串中间的低10s上似乎有数字问题。
有没有更好的方法来解决这个问题 谢谢您可以使用^(?!.*\b(\d+)\b.*\b\1\b)(?:(?:[0-9]{1,3}|1[0-9]{3}|2000)(?:,(?:[0-9]{1,3}|1[0-9]{3}|2000)){0,9})?$
看
详细信息
-字符串的开头^
-如果整个单词中有1+个数字的重复块,则会导致匹配失败的负前瞻(?!.*\b(\d+)\b.*\b\1\b)
-的可选序列(即整个字符串可能为空):(?:(?:[0-9]{1,3}1[0-9]{3}2000)(?:,(?:[0-9]{1,3}1[0-9]{3}2000]){0,9}
-从(?:[0-9]{1,3}1[0-9]{3}2000)
0到
2000的数字
-0到9次出现:(?:,(?:[0-9]{1,3}1[0-9]{3}2000)){0,9}
-逗号,
-从(?:[0-9]{1,3}1[0-9]{3}2000)
0到
2000的数字
-字符串结束$
请注意,您可能会使用一种更具可读性和可维护性的方法:使用逗号拆分字符串,确保少于11项,确保它们都是数字,然后检查所有数字是否都在0到2000之间 正是我需要的。谢谢