我有一个具有奇怪配置密钥格式的遗留应用程序,我确定该应用程序遵循以下规则:

  • 密钥可以是一个或多个长度任何字符(包括_
  • 但是,密钥不能以_结尾,也不能有__
  • 除了__可以表示后面只有数字的可选后缀

下面是一些例子:

foo_bar__2  -- legal
_foo_bar__2 -- legal
foo         -- legal
foo--$%^##  -- legal
$%^#        -- legal
foo__42     -- legal
foo_        -- illegal
f__o__2     -- illegal
_           -- illegal
foo___2     -- illegal
foo__xzy    -- illegal

在我的Java代码中,我得到了(.+[^_])(?:__(\\d+))?,但它有一个问题,它没有捕捉到数字部分.相反,它捕获后缀作为键的一部分.

一百零二

推荐答案

您可以使用此正则表达式来验证有效密钥:

^(?:_?[^_\n]+)++(?:__\d+)?$

在Java中:

final String rx = "^(?:_?[^_\n]+)++(?:__\\d+)?$";

RegEx Demo

RegEx Details:

  • ^:开始
  • (?:_?[^_]+)++:匹配optional _,后跟不是_的任何字符的1+.重复此组1次以上.++是所有格量词,使其更有效率而不会回溯
  • (?:__\d+)?:Optionally匹配__后跟1+数字,然后结束
  • $:结束

Java相关问答推荐

Spring Webocket:尽管凭据设置为False,但MLhttpsify和Fetch请求之间的CORS行为存在差异

将linkedHashMap扩展到Java中的POJO类

为什么如果数组列表中有重复项,我的代码SOMETIMES不返回true?

我想了解Java中的模块化.编译我的应用程序时,我有一个ResolutionException

不推荐使用的Environment.getExternalStorageDirectory().getAbsolutePath()返回的值不同于新的getExternalFilesDir(空)?

这是什么Java构造`(InputStream Is)->;()->;{}`

类型集合的Jackson JsonNode:类型引用的对象读取器应该是Singleton吗?

如何在JavaFX中处理多个按钮

由于在生成器模式中使用泛型,lambda表达式中的返回类型错误

在macOS上读取文件会导致FileNotFound,即使文件存在(并且具有权限)

我可以在@Cacheable中使用枚举吗

如何在盒子的顶部和底部创建两张不同图片(大小相同)的盒子?

寻找Thread.sky()方法的清晰度

JavaFX标签中的奇怪字符

Java Flux中的延迟增加

Java KeyListener不工作或被添加

无法使用Open WebStart Java 8运行jnlp

如何判断元素计数并在流的中间抛出异常?

spring 数据Elastic search 与 spring 启动数据Elastic search 之间的区别是什么?

如何在java中从以百分比表示的经过时间和结束日期中找到开始日期