比赛范围,无需重复

时间:2018-09-18 13:49:51

标签: regex

我需要一直将1/1匹配到4/48。 1 / 1,1 / 2,1 / 3一直到1 / 48,2 / 1至2/48 .... 3/1至3/48和4/1至4/48 ....但是使用正则表达式比较麻烦,因为它的末尾一定不能包含逗号,并且不能重复任何已输入的内容。

^([1-4]\/([1-9]|[1-4][0-8]|[1-3][0-9]))[?\,]+$

1 个答案:

答案 0 :(得分:1)

要匹配从148的数字

  • 19[1-9]
  • 1039[1-3][0-9]
  • 40484[0-8]

给出

[1-9]|[1-3][0-9]|4[0-8]

根据评论更新以下正则表达式

^(?:(?:^|,)[1-4]\/(?:[1-9]|[1-3][0-9]|4[0-8])(?=,|$))+$

关于非捕获组和前瞻。

  • 非捕获组(?: .. )与组( .. )相同,只是不能反向引用,因此可以最好避免增加反向引用的数量。
  • 观察头没有消耗,这意味着在匹配之后,输入字符串中的光标不会向前移动。例如,在匹配(?:,)之后,输入光标将在,之后,而在匹配(?=,)之后,即确保在输入光标位置匹配以下内容,光标位置仍将在,之前。