有人可以帮我创建一个posix正则表达式吗?

问题描述

有人可以帮我创建一个 posix 正则表达式来检查输入的字符串是否遵循以下模式:

周一、周二、周三、周四、周五、周六、周日

周一、周三、周五

星期日

那么:

  1. 星期几后跟“,”
  2. 我不能重复一周中的一天
  3. 字符串的最后一天不能有“,”

解决方法

如果日期顺序无关紧要,请使用:

^((Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)(,(?!$)(?!.*\2)|$))*$

查看演示here

说明:

  • 内括号用于表示天的分离。
  • ^ 匹配字符串的开头。
  • $ 匹配字符串的结尾。
  • (?!$) 表示字符串末尾不能跟逗号。
  • (?!.*\2) 表示后面没有任何数量的字符 (.*) 和第二组 (\2),即最里面的一组。

关于最后一点,我建议你google一下regex匹配组,lookarounds backreferences