2013-07-21 182 views
3

我有一个增量构建的字符串。在构建字符串的同时,通过正则表达式匹配整个字符串,并在找到匹配项时执行特定任务。正则表达式的部分匹配

我的要求是:如果在字符串构建过程中发现没有找到完全匹配的方法,那么字符串应该被重置,并且应该重新启动构建过程。

例如,如果一个正则表达式是"mada12gaskar"当一个char "3"被添加到现有字符串"mada1"字符串应该被清除,构建过程应该重新开始为"mada13"决不会与"mada12gaskar"匹配。这可能通过Java正则表达式API吗?

+0

提供你试图写澄清要求的代码示例。正则表达式是正则表达式,所以匹配应该是可能的,但你需要其他逻辑来“清除你的字符串”。 – eebbesen

+2

为什么downvotes?这对我来说是一个很好的问题。 –

+0

我不是专家,但为什么不直接将最后一个匹配的字符串(例如'mada1')存储在一个单独的变量中,该变量被下一个匹配的字符串覆盖?如果给定的字符串('mada13')不匹配,请用最后匹配的字符串覆盖它,单独存储。 – nozzleman

回答

6

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

Matcher#hitEnd()方法:

返回true,如果输入的结尾是由搜索引擎由此匹配执行 最后一场比赛命中的操作。

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

现在,只需对阵使用还未完全构建字符串的正则表达式一个Matcher(通过Pattern实例获得),并看看结果:

  • 如果匹配,你有你的赢家
  • ,如果它不匹配,看hitEnd()
    • 如果是true,建立更多的并再次尝试
    • 如果是false,当前字符串永远无法匹配,你可以删除它,并重新开始
+2

帽子关了,我的回答被删除了。 –

+0

只需要注意一点:“如果它是'假',当前的字符串永远不会匹配,您可以放弃它并重新开始” - 实际上您应该*回溯*并且可能找到具有相同前缀的不同字符串。 –

+0

@MarkoTopolnik当我发现该方法时,我同样感到惊讶。尽管如此,在Matcher类中还是有一些好东西可以学习,我不知道其他方法中有一半是做什么的。关于回溯 - 是的,当然。 –