我正在努力理解一个简单的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
。
答案 0 :(得分:6)
第2组捕获的文本仅包含0
,因为第一个贪婪.*
。它匹配最后一位数字,让\d+
只有最后一位数字。请参阅demo of your regex。
要修复它,请使用延迟点匹配:
(.*?)(\d+)(.*)
^
请参阅another demo
答案 1 :(得分:2)
您需要([^0-9.]*)(\\d+)(.*)
。
第一组匹配所有内容,直到最后一个零,因为您在第二组中有+
。您需要从第一组中转义数字。