我一直在使用 java.util.regex.* 类来实现 Java 中的正则表达式,到目前为止一切都很好。但今天我有一个不同的要求。例如,考虑模式为“aabb”。现在,如果输入字符串是 aa,它肯定不匹配,但是如果我附加 bb,它仍然有可能变成 aabb 并且匹配。但是,如果我从 cc 开始,无论我附加什么,它都永远不会匹配。
我已经探索了 Pattern 和 Matcher 类,但没有找到任何实现此目的的方法。
输入将来自用户,系统必须等到模式匹配,否则无论进一步输入什么,它都永远不会匹配。
有什么线索吗?
Thanks.
您应该更仔细地研究 Matcher API;这hitEnd() http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#hitEnd%28%29方法的工作原理与您所描述的完全一样:
import java.util.regex.*;
public class Test
{
public static void main(String[] args) throws Exception
{
String[] ss = { "aabb", "aa", "cc", "aac" };
Pattern p = Pattern.compile("aabb");
Matcher m = p.matcher("");
for (String s : ss) {
m.reset(s);
if (m.matches()) {
System.out.printf("%-4s : match%n", s);
}
else if (m.hitEnd()) {
System.out.printf("%-4s : partial match%n", s);
}
else {
System.out.printf("%-4s : no match%n", s);
}
}
}
}
output:
aabb : match
aa : partial match
cc : no match
aac : no match
据我所知,Java 是唯一公开此功能的语言。还有requireEnd()
方法,它告诉您更多的输入是否可以将匹配变成不匹配,但我认为这与您的情况无关。
添加这两个方法是为了支持 Scanner 类,因此它可以将正则表达式应用于流,而不需要将整个流读入内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)