java - 匹配字符串的正则表达式具有唯一的大写字母
问题描述
我正在尝试检查字符串的长度是否为 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
解决方案
原始问题:
你可以使用这个正则表达式:
^(?:([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 位数年份
推荐阅读
- ms-query - 在 MS Query 中获取分隔符之间第 n 次出现的单词
- java - 带圆角的六边形 ImageView
- coverity - Coverity 扫描构建工具 C/C++ 指令:sysctl vsyscall=emulate
- ios - 如何使用步进滑块在滑块拇指上添加 UILabel?
- python - Linux Gnome,无法安装 KIVY 所需的 PPA
- python - 如何在循环中查询python类数据
- arrays - 在每个元素至少出现 n/1000 次的数组的线性时间排序
- activiti - 如何在activiti-rest中解决startig stoppinf http客户端
- c# - 索引超出了lambda表达式linq中的数组范围
- ruby - RVM list - Warning! PATH is not properly set up