【发布时间】:2018-11-05 01:38:56
【问题描述】:
正如标题所说,我想获得输入部分匹配的 pattern 部分;示例:
图案:aabb 输入字符串:“aa”
此时,我将使用 Matcher 类的 hitEnd() 方法来确定模式是否被部分匹配,如answer 所示,但我也想具体找出“aa "aabb" 的 " 匹配。 有没有办法在java中做到这一点?
【问题讨论】:
标签: java regex matching partial
正如标题所说,我想获得输入部分匹配的 pattern 部分;示例:
图案:aabb 输入字符串:“aa”
此时,我将使用 Matcher 类的 hitEnd() 方法来确定模式是否被部分匹配,如answer 所示,但我也想具体找出“aa "aabb" 的 " 匹配。 有没有办法在java中做到这一点?
【问题讨论】:
标签: java regex matching partial
这可能很脏,但我们走吧……
一旦你知道某个字符串hitEnd,进行第二次处理:
matches,那么你就结束了,你有字符串的一部分如果测试字符串可能很长,则性能可能是个问题。因此,不要从最后到第一个位置,而是尝试搜索块。
例如,考虑一个 1,000 个字符的字符串:
【讨论】:
Matcher 类中没有这样的功能。但是,您可以通过以下方式实现它:
public String getPartialMatching(String pattern, String input) {
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
int end = 0;
while(m.find()){
end = m.end();
}
if (m.hitEnd()) {
return input.substring(end);
} else {
return null;
}
}
首先,遍历字符串的所有匹配部分并跳过它们。例如:input = "aabbaa" m.hitEnd() 将返回 false 而不会跳过 aabb。
其次,验证字符串的左边部分是否部分匹配。
【讨论】: