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

bra*_*orm 2 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) );
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是输出:

我原本group(2)打算打印3000.但为什么它只打印0.

Wik*_*żew 6

第2组捕获的文本仅包含0因为第一个贪心.*.它匹配最后一位数字,并且\d+只有最后一位数字.查看正则表达式的演示.

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

(.*?)(\d+)(.*)
   ^
Run Code Online (Sandbox Code Playgroud)

另一个演示