首页 > 解决方案 > 匹配字符串的正则表达式具有唯一的大写字母

问题描述

我正在尝试检查字符串的长度是否为 3 并且具有唯一的大写字符,然后是从 1900 年到 2019 年的 4 位数年份,我想出了下面的表达式,但它无法识别字符串是否有重复字符。有人可以帮我解决这个问题吗?

^(?:([A-Z]{3})(?!.*\1))(19\d{2}|20[0-1]\d)$

例子:ABC1990 should be matched and Group1 as ABC and Group2 as 1990 ABB1900,ABA2000,ATA1990,ATRV2010 should be failed

标签: javaregex

解决方案


原始问题:

你可以使用这个正则表达式:

^(?:([A-Z])(?!.*\1)){3}$

正则表达式演示

正则表达式详细信息:

  • ^: 开始
  • (?::启动非捕获组
    • ([A-Z]):匹配一个大写字母并在组#1中捕获
    • (?!.*\1):负前瞻以确保前面任何地方都没有重复相同的字母
  • ){3}:结束非捕获组。{3}使其匹配其中的 3 个
  • $: 结尾

更新的问题:根据您更新的问题,您可以使用此正则表达式匹配 3 个唯一的大写字母,后跟 4 位数字年份1900 to 2019

^((?:([A-Z])(?![A-Z]*\2)){3})(19\d{2}|20[01]\d)$
  • (19\d{2}|20[01]\d)匹配从 1900 年到 2019 年的 4 位数年份

正则表达式演示 2


推荐阅读