这个正则表达式模式错了吗?

时间:2013-12-20 20:21:26

标签: java regex

从此代码中获取奇怪的输出。

  • 捕获组数量:3
  • 找到的值(capturint组(1)):此订单是针对QT300
  • 找到的值(capturint group(2)):0
  • 找到值(capturint group(3)):! OK?

正则表达式是否应该在第一个'3'上断开,因为它是所有字符后的第一个数字?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CaptureGroups1 {
    public static void main(String args[]) {

        String line = "This order was placed for QT3000! OK?";

        String pattern = "(.*)(\\d+)(.*)";
        Pattern r = Pattern.compile(pattern);

        Matcher m = r.matcher(line);
        int count = m.groupCount();

        System.out.println("Number of capturing groups: " + count + '\n');

        if (m.find()) {
            for (int i = 1; i <= count; i++) {
                System.out.println("Found value(capturint group(" + i + ")): " + m.group(i));
            }
        } else {
            System.out.println("Not Found");
        }
    }
}

2 个答案:

答案 0 :(得分:0)

如果要捕获数字组,可能会从(.*)中删除括号可以帮助您。实际上,你甚至不需要它们:

String pattern = "(\\d+)";

答案 1 :(得分:0)

我猜你的意思是错的。 我怀疑你在寻找这个。

String pattern = "(\\D*)(\\d+)(.*)";

也许你想检查不情愿的量词。

http://docs.oracle.com/javase/tutorial/essential/regex/quant.html