问题描述
有人可以帮我创建一个 posix 正则表达式来检查输入的字符串是否遵循以下模式:
周一、周二、周三、周四、周五、周六、周日
或
周一、周三、周五
或
星期日
那么:
- 星期几后跟“,”
- 我不能重复一周中的一天
- 字符串的最后一天不能有“,”
解决方法
如果日期顺序无关紧要,请使用:
^((Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)(,(?!$)(?!.*\2)|$))*$
查看演示here。
说明:
- 内括号用于表示天的分离。
-
^
匹配字符串的开头。 -
$
匹配字符串的结尾。 -
(?!$)
表示字符串末尾不能跟逗号。 -
(?!.*\2)
表示后面没有任何数量的字符 (.*
) 和第二组 (\2
),即最里面的一组。
关于最后一点,我建议你google一下regex匹配组,lookarounds backreferences