首页 > 解决方案 > Java,获取与输入部分匹配的模式部分

问题描述

正如标题所说,我想获得与输入部分匹配的模式部分;例子:

模式:aabb 输入字符串:“aa”

此时,我将使用 Matcher 类的 hitEnd() 方法来确定模式是否部分匹配,如this answer所示,但我也想找出“aabb”中的“aa”是匹配的。有没有办法在java中做到这一点?

标签: javaregexmatchingpartial

解决方案


这可能很脏,但我们走吧……

一旦你知道一些 string hitEnd,做第二次处理:

  1. 从字符串中删除最后一个字符
  2. 使用原始正则表达式搜索
  3. 如果 It matches,那么你就结束了,你有字符串的一部分
  4. 如果没有,请转到 1 并重复整个过程,直到匹配

如果测试字符串可能很长,则性能可能会成为问题。因此,不要从最后一个位置到第一个位置,而是尝试搜索块。

例如,考虑一个 1,000 个字符的字符串:

  1. 测试 1000/2 个字符:1-500。对于这个例子,我们认为它匹配
  2. 测试前 500 个字符 + 500/2(1-750 个位置)。对于这个例子,我们认为它不匹配。所以我们知道仓位一定要放在500到750之间
  3. 现在测试 1-625 ((750+500)/2)... 如果匹配,则位置必须存在于 625-750 之间。如果不匹配,它必须是从 500 到 625
  4. ...

推荐阅读