Java正则表达式正向预测但仅匹配唯一字符?

2024-03-28

我正在尝试将字符串输入与以下条件进行匹配:

  1. 第一个字符是unique小写英文字母
  2. 接下来的字符代表从 1500 到 2020 的当前年份
  3. 接下来的字符只能是 10、或 100、或 1000
  4. 最后一个字符是 0 到 9 之间的数字

我创建的正则表达式字符串我认为大部分是正确的,解释如下:

String validRegex = 
"^"+                                    # start of string
(?=.*[a-z].*[a-z].*[a-z])"+             # Ensure string has only 3 consecutive lowercase English letters
"(?=.*[0-9].*[0-9].*[0-9].*[0-9])"+     # Ensure string has only 4 digits representing year i.e. 2020
"(?=.*([0-9].*[0-9]) | ([0-9].*[0-9].*[0-9]) | ([0-9].*[0-9].*[0-9].*[0-9]))"+ # Ensure 10, 100, or 100 digits
"(?=.*[0-9])"+                          # Ensure last character is a digit 0-9
"(?=\\S+$)"+                             # Ensure string has no whitespace
".{10,12}"+                              # Entire string length must be from 10 through 12 characters
"$";                                     # end of string

有没有一种简单的方法来更新我的正则表达式,以便我可以仅检测唯一的连续字符?


Look:

  • 整个输入(字符串)长度始终为 10 到 12 个字符 - ^.{10,12}$ (HOWEVER,在这种情况下,您不需要将其添加到整体模式中,因为下面的所有部分总计最多为字符串中允许的 10、11 或 12 个字符)
  • 前 3 个字符是唯一的小写英文字母 ([a-z]) - ^([a-z])(?!\\1)([a-z])(?!\\1|\\2)[a-z]
  • 接下来的4个字符代表从1500到2020年的当前年份,即2020 - (?:1[5-9][0-9]{2}|20[01][0-9]|2020)
  • 接下来的字符只能是 10、100 或 1000 个(因此至少 2 个字符(即 10),或最多 4 个字符(即 1000)) - [0-9]{2,4}
  • 最后一个字符是 0 到 9 之间的数字 - [0-9].

连接这些位,你会得到

String regex = "^([a-z])(?!\\1)([a-z])(?!\\1|\\2)[a-z](?:1[5-9][0-9]{2}|20[01][0-9]|2020)[0-9]{2,4}[0-9]$";

See the 正则表达式演示 https://regex101.com/r/gwkBic/1.

如果您计划支持小写和大写字母,请添加不区分大小写修饰符(?i)在开始时:

String regex = "(?i)^([a-z])(?!\\1)([a-z])(?!\\1|\\2)[a-z](?:1[5-9][0-9]{2}|20[01][0-9]|2020)[0-9]{2,4}[0-9]$";

如果末尾可以是字母,而不仅仅是数字,则可以使用

String regex = "(?i)^([a-z])(?!\\1)([a-z])(?!\\1|\\2)[a-z](?:1[5-9][0-9]{2}|20[01][0-9]|2020)[0-9]{2,4}[0-9a-z]$";

See 这个正则表达式演示 https://regex101.com/r/gwkBic/2.

要创建正则表达式数字范围,您可以使用以下众所周知的服务gamon.webfactional.com http://gamon.webfactional.com/regexnumericrangegenerator/ or 里奇·本德尔.ml https://www.richie-bendall.ml/ros-regex-numeric-range-generator/, or MyRegexTester.com https://www.myregextester.com/index.php.

See the Java演示 https://ideone.com/bwt5sF:

String regex = "(?i)(([a-z])(?!\\2)([a-z])(?!\\2|\\3)[a-z])(1[5-9][0-9]{2}|20[01][0-9]|2020)([0-9]{2,4})([0-9a-z])";
String s = "AVG190420T";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
    System.out.println("Part 1: " + matcher.group(1));
    System.out.println("Part 2: " + matcher.group(4));
    System.out.println("Part 3: " + matcher.group(5));
    System.out.println("Part 4: " + matcher.group(6));
} else {
    System.out.println(s + " does not match the pattern.");
}

Output:

Part 1: AVG
Part 2: 1904
Part 3: 20
Part 4: T
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java正则表达式正向预测但仅匹配唯一字符? 的相关文章

  • 如何用Spring进行只读和读写的数据库路由

    我正在研究 Spring 中的事务路由 但我的应用程序存在运行时问题 我有两个 MySQL 数据库 一个用于读取 一个用于读 写 但是我的路由配置不起作用 当我应用只读配置时 我没有成功 这是我的配置 pom xml
  • JTable 中的格式化字段问题 - Integer 和 Double 之间的差异

    更新 已确认为错误当 columnClass 为 Double 时 JTable 无法将给定对象格式化为 Number 错误 ID 7051636 https bugs java com bugdatabase view bug bug i
  • 如何在 El Capitan (OS X 10.11) 中设置 Android Studio?

    全新安装 El Capitan 10 11 尝试安装 Android Studio 版本 1 21 Error Android Studio was unable to find a valid JVM Please download it
  • 通过 jdbc 执行存储过程时获取网关超时

    我正在使用 struts2 框架 它基本上是这样的 ActionClass execute call function in business class which returns an object and store this obj
  • 我的 Java Web 应用程序中的 ClassNotFoundException/NoClassDefFoundError

    我使用 Java 开发了一个 Web 应用程序 当我将其部署到我的应用程序服务器 Jetty Tomcat JBoss GlassFish 等 时 会抛出错误 我可以在堆栈跟踪中看到此错误消息 java lang ClassNotFound
  • GUID 的格式始终相同吗?

    GUID 你会得到类似 aaaef973 d8ce 4c92 95b4 3635bb2d42d5 总是一样吗 它总是具有以下格式吗 8 个字符 4 个字符 4 个字符 4 个字符 12 个字符 我这么问是因为我需要将不带 的 GUID 转换
  • 递归 - 与 Java 中不重复的数组相结合

    所以我知道如何获取组合的大小 数组大小 在我的例子中 除以所需数组子集大小的阶乘 我遇到的问题是获取组合 到目前为止 我已经阅读了 stackoverflow 上的大部分问题 但一无所获 我认为我发现的问题是我想将创建的组合子集中的元素添加
  • “找不到符号”或“无法解析符号”错误是什么意思?

    请解释以下有关 找不到符号 无法解析符号 或 找不到符号 错误 Java 中 的信息 他们的意思是什么 哪些因素会导致它们 程序员如何修复它们 这个问题旨在对 Java 中的这些常见编译错误进行全面的问答 0 这些错误之间有什么区别吗 并不
  • Android文件上传器与服务器端php

    我几个小时以来一直在寻找解决方案 但找不到任何解决方案 基本上 我想从我的 Android 设备上传文件到 http 网站 但是 我不知道如何做到这一点 我在设备上使用java 并且我想在服务器端使用PHP 我只想上传文件 而不是在服务器上
  • Hibernate 在更新集合时删除孤儿

    我发现从 Hibernate 中的集合中删除时 孤立记录不会被删除 我一定是做了一些简单的错误 这是 Hibernate 101 但我找不到它 鉴于以下情况 public class Book ManyToOne NotNull Autho
  • Java HashSet 具有自定义相等标准? [复制]

    这个问题在这里已经有答案了 我一直在寻找类似于 Java TreeSet 在实例化时接收自定义比较器的能力 因此我不需要使用对象的默认相等 和哈希码 标准 我能想到的最接近的方法是将我的对象包装在一个私有的自定义类中 但这看起来很老套 这最
  • 将 JSON 与嵌套数组和 json 进行比较(数组顺序无关紧要)

    你好 我正在尝试比较java中的两个json 每个键可以包含一个json对象或json对象数组 并且它们中的每个也可以是数组或json 这是 Json 的示例 id 123123asd123 attributes name apps val
  • 如何使用 JAVA 将本地图像而不是 URL 发送到 Microsoft Cognitive Face API

    我正在尝试使用 Microsoft 认知服务的 Face API 我想知道如何通过 Rest API 调用将本地图像发送到 Face API 并使用它请求结果JAVA 有人可以帮我解决这个问题吗 Microsoft 在其网站上提供的测试选项
  • 使用 getPathMatcher 的全局模式

    从 OCP 考试的 Kathy Sierra Bert Bates 书中我找到了以下代码 public class FileTest public static void matches Path path String glob Path
  • JDBC多线程插入可以吗?

    我目前正在开发一个 Java 项目 我需要准备一个大的 对我来说 mysql 数据库 我必须使用 Jsoup 进行网页抓取并将结果存储到我的数据库中 据我估计 我将大约插入 1 500 000 到 2 000 000 条记录 在我的第一次试
  • 如何在pdf中导出一对一的JTable[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 JTable 标题没有出现在图像中 https stackoverflow com questions 7369814 why does the jtable header not appea
  • Java - 全局、可重用的加载对话框

    我正在尝试实现一个全局加载对话框 我想调用一些静态函数来显示对话框和一些静态函数来关闭它 与此同时 我正在主线程或子线程中做一些工作 我尝试以下操作 但对话框没有更新 最后一次 在再次隐藏之前 它会更新 private static Run
  • Java 8 中接口和抽象类之间的根本区别[重复]

    这个问题在这里已经有答案了 考虑到接口现在可以为其提供的方法提供实现 我无法正确合理地解释接口和抽象类之间的差异 有谁知道如何正确解释其中的差异 我还被告知 从性能角度来看 接口比抽象类更轻量 有人可以证实这一点吗 接口仍然不能有任何状态
  • 你在实际项目中使用过Quickcheck吗[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 快速检查 http www cs chalmers se rjmh QuickCheck 及其变体 即使有一个Java https bitbuc
  • 如何将钱兑换成零钱

    尝试将输入的数字转换为 25 美分 50 美分 10 美分和 10 分 有几个问题 public class Coins public static void main String args private int quarters di

随机推荐

  • UPPAAL 错误 - java.io.IOException:服务器连接丢失

    我正在学习形式验证 我应该使用我刚接触的 UPPAAL 但是 每次启动 UPPAAL 时 都会遇到以下错误 java io IOException Server Connection Lost 有什么办法可以修复这个错误吗 我在 64 位机
  • 将用户从 Google Checkout 映射到 Android 许可响应

    我正在使用 Android 许可 如下所述 http developer android com guide market licensing index html http developer android com guide mark
  • 使用php触发另一个php脚本,然后忽略

    我正在尝试弄清楚该怎么做是这样的 我有一个 php 文件 让我们调用trigger php运行一些 php 代码来启动我们将调用的另一个 php 文件backgroundProcess php开始处理 虽然trigger php需要忽略发生
  • 新手:“rake -T”时出现错误消息

    我在用红宝石企业版对于我的项目 当我检查我所有的耙任务通过运行命令rake T 我收到以下错误消息 You have already activated rake 0 9 2 2 but your Gemfile requires rake
  • Spring Security 访问因缺少角色而被拒绝记录

    对于 Spring Security 中的访问被拒绝登录 是否有开箱即用的解决方案 我想要的基本上是显示用户在收到访问被拒绝异常时缺少哪个角色 如果没有 我必须走上拥有自己的 accessDeniedHandler 的道路 如何访问在该控制
  • RESTful 资源和正交资源问题

    如果我使用的 3 层应用程序具有通过 HTTP 访问的中间层中的面向 RESTful 资源的服务 那么向 UI 层提供正交资源的最佳方式是什么 一个例子是 用户 资源 它具有一个国家 地区的字段 属性 现在在 UI 层中编辑用户时 我希望能
  • WordPress,使用 cookie 进行类别重定向

    我想要实现的目标 当用户访问该网站并选择特定类别时 他们下次访问该网站 回访用户 时 该页面将在该类别部分打开 我认为 通过在访问者单击类别链接 或加载类别页面时 时设置 cookie 这将相当容易做到 当它们返回以下时间时 将读取 coo
  • 在 Django/mod_wsgi 虚拟环境中配置 WSGIPythonHome 的问题

    我在 Windows 10 上运行 Python 3 7 1 和 Apache 2 4 38 我设置了一个虚拟环境 其中包含通过 pip 安装的 Django 2 2 5 和 mod wsgi 4 6 5 在 httpd conf 内部 我
  • 如何获取字符串中所有匹配的位置?

    我有一个专栏flag acumu在 PostgreSQL 的表中 其值如下 SSNSSNNNNNNNNNNNNNNNNNNNNNNNNNNNNSNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 我需要用 S 显
  • “user-images.githubusercontent.com”上的图像可以删除吗?

    我不小心在 GitHub 上上传了一张我不想放的图片 我原以为出于示例目的 我已经从上传的图像中删除了私人信息 但私人信息仍然存在 它包含诸如主机名之类的内容 我希望这些内容不是公开的 有没有办法从 github 的图像注册表中删除该图像
  • 到本地主机的 New-PSSession 失败

    我有一个打开本地主机远程会话的脚本 我需要这个来从登录脚本中在某些设备上安装 NuGet Username Admin Password ConvertTo SecureString adminPW AsPlainText Force ad
  • getElementsByClassName onclick 问题[重复]

    这个问题在这里已经有答案了 我在用着罗伯特 尼曼的 http robertnyman com 2008 05 27 the ultimate getelementsbyclassname anno 2008 脚本来获取文档中具有相同类的所有
  • 使用非 root 且无需 CPAN 安装 Perl 模块和依赖项

    我一直在为我的工作编写 Perl 脚本 而我工作的机器使安装 Perl 模块变得困难 我们不能有gcc出于安全原因 在我的机器上 所以对于大多数模块 我无法使用 CPAN 来安装模块 我无权访问 root 帐户 通常 当我想安装模块时 我会
  • 朱莉娅:当我有情节时如何找到最佳拟合曲线/方程?

    朱莉娅 当我有情节时如何找到最佳拟合曲线 方程 我有一个用地图绘制的图 但我需要找到一个适合这个的二次方程 正如评论中所说 情节在这里并不重要 只有数据本身是 您可以使用诸如GLM构建数据的 广义 线性模型 并可能绘制它们或使用它们来预测新
  • 请求的运行时 (python-) 不适用于此堆栈 (heroku-20)

    我在尝试通过 Heroku 部署这个 Flask 应用程序时遇到了困难 我研究了多种方法来解决这个问题 但似乎找不到一种可行的方法 这就是当我推动时我得到的git push heroku master remote gt Building
  • Dev-C++ 输入已跳过

    include
  • .NET 4.0 解决方案中的 NHibernate 1.2

    我有一些基于 NHibernate 1 2 的项目 我想将它们添加到 NET 4 0 解决方案中 但我收到 AmbigeousMatchException 无论这些项目是针对2 0还是4 0框架 如果我将它们添加到 NET 3 5 解决方案
  • 将刻度转换为时间格式 (hh:mm:ss)

    我从网络服务器获取视频长度值作为刻度 我想以 hh mm ss 格式显示它 我怎样才能在 JavaScript 中做到这一点 假设刻度以秒为单位 如果不是 您可以先将其转换为秒 您可以通过查找时间跨度中的整分钟数和小时数 然后获取剩余的秒数
  • 我什么时候应该使用解析器?

    我在正则表达式中遇到了将代码划分为功能组件的问题 它们可能会破裂 也可能需要很长时间才能完成 这段经历提出了一个问题 我什么时候应该使用解析器 当您对以下内容感兴趣时 应该使用解析器文本的词汇或语义意义 当模式可以变化时 当您只是想了解时
  • Java正则表达式正向预测但仅匹配唯一字符?

    我正在尝试将字符串输入与以下条件进行匹配 第一个字符是unique小写英文字母 接下来的字符代表从 1500 到 2020 的当前年份 接下来的字符只能是 10 或 100 或 1000 最后一个字符是 0 到 9 之间的数字 我创建的正则