Java Regex捕获组

Java Regex捕获组

我试图理解这个代码块。在第一个中,我们在表达中寻找什么?

我的理解是它是任何字符(0次或更多次*)后跟0到9之间的任何数字(一次或多次+)后跟任何字符(0次或更多次*)。

执行此操作时,结果为:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

有人可以和我一起讨论吗?

使用捕获组有什么好处?

import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexTut3 {

    public static void main(String args[]) {
        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));
        } else {
            System.out.println("NO MATCH");
        }
    }}


catspeake
浏览 564回答 3
3回答

呼如林

这完全没问题。第一个组(m.group(0))始终捕获正则表达式覆盖的整个区域。在这种情况下,它是整个字符串。默认情况下,正则表达式是贪婪的,这意味着第一组在不违反正则表达式的情况下尽可能地捕获。在(.*)(\\d+)(你的正则表达式的第一部分)覆盖...QT300INT第一组和0第二。您可以通过使第一组非贪婪来快速解决此问题:更改(.*)为(.*?)。有关贪婪与懒惰的更多信息,请查看此站点。
打开App,查看更多内容
随时随地看视频慕课网APP