您可以
(?!.*([a-z]{2}).*1)在正则表达式的开头使用否定的前瞻,以禁止在字符串中重复2个字母的值(由于字符串格式,您甚至不需要在前瞻中进行单词边界或逗号上下文检查):
^(?!.*b([a-z]{2})b.*b1b)(fr|sa|su|mo|tu|we|th)?(?:,(?:fr|sa|su|mo|tu|we|th)){0,5}$
请参阅regex演示。
该
(?!.*b([a-z]{2})b.*b1b)是负先行失败的比赛,如果有是字符串中重复的两个字母块。
Java演示:
String day = "fr|sa|su|mo|tu|we|th";String pattern = "(?!.*\b([a-z]{2})\b.*\b\b)(?:" + day + ")?(?:,(?:" + day + ")){0,5}";if (s.matches(pattern)) { System.out.println("Valid!");} else { System.out.println("Invalid!");}
请注意,这
String#matches需要完整的字符串匹配,因此
^和
$不是必需的。
请注意您可能会缩短
day使用部分 字符类 ,
fr|sa|su|mo|tu|we|th=>
fr|s[au]|mo|t[uh]|we。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)