Java 匹配字符串的正则表达式具有唯一的大写字母

Java 匹配字符串的正则表达式具有唯一的大写字母,java,regex,Java,Regex,我试图检查字符串的长度是否为3,是否有唯一的大写字符,后面是1900年到2019年的4位数年份,我提出了下面的表达式,但它无法确定字符串是否有重复字符。有人能帮我修一下吗 ^(?:([A-Z]{3})(?!.*\1))(19\d{2}|20[0-1]\d)$ 示例:ABC1990应匹配,组1为ABC,组2为1990 ABB1900、ABA2000、ATA1990、ATRV2010应失败原始问题: 您可以使用此正则表达式: ^(?:([A-Z])(?!.*\1)){3}$ 正则表达式详细信息

我试图检查字符串的长度是否为3,是否有唯一的大写字符,后面是1900年到2019年的4位数年份,我提出了下面的表达式,但它无法确定字符串是否有重复字符。有人能帮我修一下吗

^(?:([A-Z]{3})(?!.*\1))(19\d{2}|20[0-1]\d)$
示例:
ABC1990应匹配,组1为ABC,组2为1990

ABB1900、ABA2000、ATA1990、ATRV2010应失败
原始问题:

您可以使用此正则表达式:

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

正则表达式详细信息:

  • ^
    :开始
  • (?:
    :启动非捕获组
    • ([A-Z])
      :匹配大写字母并在第1组中捕获
    • (?!.*\1)
      :反向向前看,以确保前面任何地方都不会重复相同的字母
  • ){3}
    :结束非捕获组<代码>{3}使其与其中3个匹配
  • $
    :结束

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

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

正则表达式可以工作,但我也有初始值之后的年份,所以我尝试使用您的正则表达式作为
^((?:([A-Z])(?!*\1)){3})(19\d{2}20[0-1]\d)$
,但它不起作用,我只是更新了问题,你能检查一下吗?我刚刚检查了更新的一个,注意到它捕获了3个组
Group1-ABC
Group2-C
Group3-1990
,但我只希望有2个组具有
ABC
1990
一种替代方法是使用如下命名组: