我正在做一个需要数字模式匹配的项目。
例如,我想知道Value = 1331
是否属于680+651 = 1331
的一部分,即我想将1331
与680+651 = 1331
或任何其他给定字符串匹配。
我是第一次在java中尝试模式匹配,但我无法成功。以下是我的代码段。
String REGEX1=s1; //s1 is '1331'
pattern = Pattern.compile(REGEX1);
matcher = pattern.matcher(line_out); //line_out is for ex. 680+651 = 1331
System.out.println("lookingAt(): "+matcher.lookingAt());
System.out.println("matches(): "+matcher.matches());
它一直都是假的。 请帮助我。
答案 0 :(得分:3)
matches()
要求模式完全匹配,而不是部分匹配。
您需要将模式更改为.*= 1331$
或使用find()
方法进行部分匹配。
答案 1 :(得分:2)
matches
方法需要完美匹配。由于680+651=1331
中的文字多于正则表达式1331
匹配的文字,因此匹配项会返回false
。
正如我在Brian的帖子中指出的那样,你需要小心你的正则表达式,以确保1331
的正则表达式与213312
的正则表达式不匹配,除非这是你想要的。
答案 2 :(得分:2)
matches()
是错误的方法,请使用find()
。
http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Matcher.html说:
public boolean matches()
尝试将整个输入序列与模式匹配。
和
public boolean find()
尝试查找与模式匹配的输入序列的下一个子序列。