匹配数字模式

3

我正在做一个需要数字模式匹配的项目。

例如,我想知道Value = 1331是否属于680 + 651 = 1331或者其他给定的字符串中。即,我想将1331680+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());    

它一直返回 false。 请帮助我。
3个回答

3

matches()方法要求匹配模式必须是完整的,而不是部分的。

你需要将模式更改为像.*= 1331$这样的内容,或使用find()方法进行部分匹配。


要在任何地方找到 1331,请尝试使用 (?:^|[^\\d])1331(?:[^\\d]|$) - John B
我不确定你在这个简单的问题中是否真的需要前瞻/后顾的东西,但是没关系 :) 我不想让那个可怜的人感到困惑。 - Brian Roach

2
matches方法要求完全精确匹配。由于在680+651=1331中有更多的文本不被正则表达式1331匹配,因此matches返回false
正如我在Brian的帖子中指出的那样,你需要小心你的正则表达式,以确保正则表达式1331不匹配数字213312,除非这是你想要的。

(?:^|[^\d])1331(?:[^\d]|$) 是正确的。但如果匹配的字符串类似于 1331-2662= -1331,它会返回 true。如何避免这种情况。 - Anil
(?:^|[^\\d\\-])1331(?:[^\\d]|$) - John B

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接