找出该部分字符串的最佳方法是潜在的RegEx匹配

时间:2011-02-10 08:22:05

标签: java regex

你会怎么做:

我有一个字符串和一些正则表达式。然后我遍历字符串,并且在每次迭代中我都需要知道该字符串的部分(字符串索引0到字符串当前迭代的索引)是否可能在下一次迭代中完全匹配一个或多个给定的正则表达式。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

这样的代码怎么样:

// all of *greedy* regexs into a list
List<String> regex = new ArrayList<String>();
// here is my text
String mytext = "...";

String tmp = null;
// iterate over letters of my text
for (int i = 0; i < mytext.length(); i++) {
     // substring from 0. position till i. index
     tmp = mytext.substring(0, i);
     // append regex on sub text
     for (String reg : regex ) {
          Pattern p = Pattern.compile(reg);
          Matcher m = p.matcher(tmp);
          // if found, do smt
          if (m.find() ) { bingo.. do smt! }
     }     
}

答案 1 :(得分:1)

您可以使用Matcher.lookingAt()尝试尽可能多地匹配给定输入,但不要求整个输入匹配(.matches()需要匹配的完整输入和{{1}不需要匹配从头开始)。

答案 2 :(得分:0)

我不相信Java正则表达式API提供了这样的“增量”或“逐步”搜索。

然而,您可以使用reluctant quantifiers制定表达方式。

  

[...]然而,不情愿的量词采用了相反的方法:它们从输入字符串的开头开始,然后不情愿一次吃一个字符寻找匹配。他们尝试的最后一件事是整个输入字符串。 [...]


如果在您的情况下这不可行,您可以使用Matcher.setRegion方法逐步增加匹配器使用的区域。

答案 3 :(得分:0)

所以我一直在寻找Java标准RegEx库的替代品,并找到了能够很好地完成工作的工具 - JRegex