java 正则 数字重复_java – 正则表达式在一组数字中查找重复出现的数字集

给定一组数字,正则表达式可以找到长度为N的数字子集不止一次,最好是在循环变量N上.我目前有一些东西找不到单次出现,但这会返回太多的噪音.我希望它在循环中找到长度为N的集合,将N从大集合减少到小集合.

看似随意的数字序列是转换为数字字符串的字节数组,我想要捕获的集合是XOR编码文件的可能键.

鉴于编码文本足够长,可能存在N个空格与长度为N的密钥相关的时间,其以大致明文再现密钥.我测试了这个,例如:

" " ^ "ThisIsTheKey" produces roughly "tHISiStHEkEY"

当前正则表达式(java引擎):

String regex = "(\\d+)\\1";

Pattern patt = Pattern.compile(regex);

Matcher matcher = patt.matcher(sToDecode);

while (matcher.find())

{

System.out.println("Repeated substring: " + matcher.group(1));

}

鉴于:

737568797372696810068791021116868686873696868657376791001117268681067368686868736865736810169686872687972686568689876796869726874749911010194687265796810111086696511099688368688369868984896876708580849586987885681111109978697865767372737668676968796870797899110101110107736868726569697978736868657394707570661101011101079878991101101026968736879686572100736868766968736879686572100736867681107968657210073686876696873687968657210073686876696873687968101110107981007368687669687368796865721007368687669681006872689968796865721007368687669687368796865721007368687673666910772100736868766968736879686572100736868766810011073687968657210073686876696873687767696868711109911010168657210073686876696873687968657210073686876696873687968657210073681111107368796865721007368687669687368796865721007368687669687299110101686572100736868766968736879686572100681056899687968657210073686876696873687968657210073686876696873687310111010772100736868766968736879686572100736868766968737368102111110736879686572100 …

这将找到以下reoccuring子集:

...

Repeated substring: 736879686572100736868766968

Repeated substring: 1

Repeated substring: 0

Repeated substring: 68

Repeated substring: 6

Repeated substring: 0

Repeated substring: 68

Repeated substring: 686572100736868766968736879

Repeated substring: 1

Repeated substring: 657210073686876696873687968

...

如果可以更改正则表达式,请告诉我它只会返回:

Repeated substring: 736879686572100736868766968

Repeated substring: 686572100736868766968736879

Repeated substring: 657210073686876696873687968

最佳答案 使用将匹配从一个到多个数字,这就是为什么你得到所有这些短子串.如果要在长度上添加约束,只需将其更改为{n,m},其中0 <= n

(\d{3,})\1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值