你会怎么做:
我有一个字符串和一些正则表达式。然后我遍历字符串,并且在每次迭代中我都需要知道该字符串的部分(字符串索引0到字符串当前迭代的索引)是否可能在下一次迭代中完全匹配一个或多个给定的正则表达式。
感谢您的帮助。
答案 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