为什么这个正则表达式不起作用?

时间:2012-11-12 01:20:45

标签: java regex

我的正则表达式看起来像\D*(\d*).*。它的意思是获取它能找到的第一个数字并将其存储在第一个捕获组中。但是,当我给它添加像testing123这样的字符串时,它与它不匹配!这让我困惑了一段时间;为什么不匹配?

Java代码:

String s = "testing123"
Pattern p = Pattern.compile("\\D*(\\d*).*");
Matcher m = p.matcher(s);
//m did not match anything

2 个答案:

答案 0 :(得分:5)

我认为您错误地使用了Matcher对象:调用

if (m.find()) {
    System.out.println(m.group(1));
}

打印123

link to ideone)。

答案 1 :(得分:0)

简化您的正则表达式

你的表达是:

  

\ d *(\ d *)。*

这意味着:

  1. 除数字之外的零个或多个字符......
  2. 后跟零个或多个数字......
  3. 后跟零个或多个字符。
  4. 除了任何语法问题,这似乎是一个不必要的复杂问题。要匹配一行中的数字,为什么不捕获数字呢?例如:

    \d+
    

    或者,如果您想确保在单词边界的末尾只有数字,例如:

    \d+\b
    

    可与任何兼容PCRE的引擎一起使用。在Java中,这始终将“123”放入group(0)而不需要捕获子表达式。