正则表达式30个数字+空格+连字符+空格1个数字

时间:2014-09-30 09:09:25

标签: java regex

我有这个代码来找到这个模式: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都没有工作,有人可以帮助我在哪里出错吗?

2 个答案:

答案 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 Matchermatches

  

尝试将整个区域与模式匹配。

find相反:

  

尝试查找与模式匹配的输入序列的下一个子序列。

因此,使用matches整个 String与模式匹配,使用findString内找到模式。

尝试:

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

我稍微编辑了你的模式,使其更加健壮。这将打印找到的每个匹配。