繁体   English   中英

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

[英]regex matching pattern in java

我正在努力理解一个简单的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因为第一个贪婪.* 它匹配最后一位数字,让\\d+只有最后一位数字。 查看正则表达式的演示

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

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

另一个演示

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM