正则表达式示例

时间:2015-07-08 01:46:45

标签: java regex

我对这个例子有点困惑......我不明白这个String模式中写的是什么。另外,find是什么?我是从TutorialsPoint学习的。

拜托,有人可以帮我理解吗?

代码:

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

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

        // String to be scanned to find the pattern.
        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");
        }
    }
}

输出:

  

找到价值:此订单是为QT3000下达的! OK?
  找到价值:此订单是为QT300配的   发现价值:0

2 个答案:

答案 0 :(得分:2)

该模式有3个捕获组

  • (.*)表示零个或多个任何字符(捕获组1)
  • (\\d+)表示一个或多个数字(捕获组2)
  • (.*)表示零个或多个任何字符(捕获组3)

调用find()时#34;尝试查找与模式匹配的输入序列的下一个子序列。" (Matcher.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));
  • m.group(0)表示正则表达式评估的整个String
  • m.group(1)指捕获第1组(任何角色的零个或多个)
  • m.group(2)指捕获第2组(一个或多个数字)
  • 您目前尚未输出捕获组3(任何字符的零个或多个)

您会看到m.group(1)返回This order was placed for QT300,而m.group(2)留下了最后一个零,因为捕获组2必须至少有一位数。

如果要将捕获组3(m.group(3))添加到输出中,它将在m.group(2)的最后一个零之后显示剩余的字符串。

换句话说:

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));

会显示:

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

希望这有帮助!

答案 1 :(得分:1)

find()将找到与模式匹配的输入序列的下一个子序列。当且仅当输入序列的子序列与此匹配器的模式匹配时,返回true

你的正则表达式有3组: (.*)是第1组,(\\d+)是第2组,(.*)是第3组。

第1组匹配前面标记的0或更多,除了换行符之外的任何字符。

第2组与前面的标记中的1个或多个匹配任何数字字符(0-9)。

第3组与第1组相同。

所以当你打电话时:

m.group(0)将返回整个String。

m.group(1)将返回第1组。

m.group(2)将返回第2组。

传递给组的参数是正则表达式中组的索引。