Java 正则表达式的部分匹配

Java 正则表达式的部分匹配,java,regex,Java,Regex,我有一个以增量方式构建的字符串。在构建字符串时,正则表达式将其作为一个整体进行匹配,当找到匹配项时,将执行特定任务 我的要求是:如果在字符串构建过程的中间发现没有找到精确匹配的方法,则应该重置字符串,并重新构建生成过程。 例如,如果正则表达式是“mada12gaskar”,并且在将字符“3”添加到现有字符串“mada1”时,应清除该字符串,并且应重新开始构建过程,因为“mada13”将永远不会与“mada12gaskar”匹配。这可以通过Java正则表达式API实现吗?我想我找到了解决您问题的可

我有一个以增量方式构建的字符串。在构建字符串时,正则表达式将其作为一个整体进行匹配,当找到匹配项时,将执行特定任务

我的要求是:如果在字符串构建过程的中间发现没有找到精确匹配的方法,则应该重置字符串,并重新构建生成过程。


例如,如果正则表达式是
“mada12gaskar”
,并且在将字符
“3”
添加到现有字符串
“mada1”
时,应清除该字符串,并且应重新开始构建过程,因为
“mada13”
将永远不会与
“mada12gaskar”
匹配。这可以通过Java正则表达式API实现吗?

我想我找到了解决您问题的可能方法

看看方法:

如果搜索引擎在 此匹配器执行的最后一次匹配操作

当此方法返回true时,则可能需要更多的输入 将更改上次搜索的结果

现在,只需使用
匹配器(可通过
模式
实例获得)将regexp与尚未完全构造的字符串进行匹配,然后查看结果:

  • 如果它匹配,你就有了赢家
  • 如果不匹配,请查看
    hitEnd()
    • 如果是
      true
      ,请生成更多字符串并重试
    • 如果
      为false
      ,则无法匹配当前字符串,您可以删除它并重新开始

提供您试图编写的代码示例,以澄清需求。Regex是Regex,所以匹配应该是可能的,但是你需要其他逻辑来“清除你的字符串”。为什么会有反对票?这对我来说是一个很好的问题。我不是一个专家,但你为什么不把最后一个匹配字符串(例如,
mada1
)存储在一个单独的变量中,然后用下一个匹配字符串覆盖?如果给定的字符串(
mada13
)不匹配,请使用最后一个匹配的字符串覆盖它,并单独存储。您应该添加一个具体的简短示例,说明您想要什么,因为似乎没有人(除了Marko Topolnik)像我理解的那样理解这个问题。据我所知,如果regexp是
ab
,则a不匹配,因此您继续并添加另一个字符:
ac
,您希望停止,因为向
ac
添加字符将无法匹配regexp
ab
。我对您需要支持的regexp子集非常感兴趣。您需要哪些功能?另外,您能否将您的意图表述为“我需要构建与特定regexp匹配的所有字符串”?或者更像是“我需要构建一个与这一千个regexp匹配的字符串”,或者简单地说“我需要知道如果我们添加了一些东西,这个字符串是否可以与这个regexp完全匹配。”?脱帽致敬,我的答案被删除了。只有一个警告:“如果它是
false
,则当前字符串永远无法匹配,您可以删除它并重新开始“---实际上,你应该回溯,也许会找到一个前缀相同的字符串。@MarkoTopolnik当我发现这个方法时,我同样感到惊讶。尽管如此,在
Matcher
类中仍然有一些好东西需要学习,我不知道其他方法的一半是做什么的。关于回溯-是的,当然。非常感谢!。这似乎是我的解决办法。我试试看。