我有这个代码来找到这个模式:201409250200131738007947036000 - 1,在文本中
final String patternStr = "(\\d{30} - \\d{1})";
final Pattern p = Pattern.compile(patternStr);
final Matcher m = p.matcher(page);
if (m.matches()) {
System.out.println("SUCCESS");
}
但是,对于Java中的任何奇怪的reasson都没有工作,有人可以帮助我在哪里出错吗?
答案 0 :(得分:4)
原因是matches
方法检查整个给定字符串以匹配正则表达式。
因此,如果您的字符串为123456123412345612341234561234 - 8
,则会匹配,如果是my number 123456123412345612341234561234 - 8 is inside other text
则不会。
使用find
方法完成您的任务:
if (m.find()) {
System.out.println("SUCCESS");
}
在内搜索给定的字符串,而不是尝试匹配整个字符串。
答案 1 :(得分:2)
来自documentation for Matcher
,matches
:
尝试将整个区域与模式匹配。
与find
相反:
尝试查找与模式匹配的输入序列的下一个子序列。
因此,使用matches
将整个 String
与模式匹配,使用find
在String
内找到模式。
尝试:
final String patternStr = "\\d{30}+\\s-\\s\\d";
final Pattern p = Pattern.compile(patternStr);
final Matcher m = p.matcher(page);
while (m.find()) {
System.out.printf("FOUND A MATCH: %s%n", matcher.group());
}
我稍微编辑了你的模式,使其更加健壮。这将打印找到的每个匹配。