java中的正则表达式匹配模式

时间:2015-09-11 23:10:59

标签: java regex

我正在努力理解一个简单的regex。我用Google搜索了一下。不知何故,它并没有让我感到惊讶。

以下是方法:

public static void testMethod(){
        String line = "This order was placed for QT3000! OK?";
        String pattern = "(.*)(\\d+)(.*)";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(line);
        if (m.find( )) {
           System.out.println("Found value: " + m.group(0) );
           System.out.println("Found value: " + m.group(1) );
           System.out.println("Found value: " + m.group(2) );
           System.out.println("Found value: " + m.group(3) );
        }
    }

这是输出:

我希望group(2)能够打印3000。但为什么它只打印0

2 个答案:

答案 0 :(得分:6)

第2组捕获的文本仅包含0,因为第一个贪婪.*。它匹配最后一位数字,让\d+只有最后一位数字。请参阅demo of your regex

要修复它,请使用延迟点匹配:

(.*?)(\d+)(.*)
   ^

请参阅another demo

答案 1 :(得分:2)

您需要([^0-9.]*)(\\d+)(.*)

第一组匹配所有内容,直到最后一个零,因为您在第二组中有+。您需要从第一组中转义数字。