gpt4 book ai didi

java - 如何使用 java.util.regex.* 执行部分匹配?

转载 作者:IT老高 更新时间:2023-10-28 20:21:22 27 4
gpt4 key购买 nike

我一直在使用 java.util.regex.* 类在 Java 中进行正则表达式,到目前为止一切都很好。但是今天我有不同的要求。例如,将模式视为“aabb”。现在如果输入字符串是 aa 它肯定不会匹配,但是如果我附加 bb 它仍然有可能变成 aabb 并且它匹配。但是,如果我从 cc 开始,无论我附加什么,它都不会匹配。

我已经探索了 Pattern 和 Matcher 类,但没有找到任何方法来实现这一点。

输入将来自用户,系统必须等到模式匹配,否则无论进一步输入如何,它都永远不会匹配。

有什么线索吗?

谢谢。

最佳答案

您应该更仔细地查看 Matcher API; hitEnd()方法与您描述的完全一样:

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);
}
}
}
}

输出:

aabb : match
aa : partial match
cc : no match
aac : no match

据我所知,Java 是唯一公开此功能的语言。还有 requireEnd() 方法,它告诉您更多输入是否可以将匹配变为不匹配,但我认为这与您的情况无关。

添加了这两种方法以支持 Scanner 类,因此它可以将正则表达式应用于流,而无需将整个流读入内存。

关于java - 如何使用 java.util.regex.* 执行部分匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2469231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com