“正则表达式 分组”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
第139行: 第139行:
 
找到第2个分组的内容:8
 
找到第2个分组的内容:8
 
找到第3个分组的内容:9
 
找到第3个分组的内容:9
 +
</syntaxhighlight>
 +
 +
 +
 +
 +
=== 示例:通过命名分组 ===
 +
<syntaxhighlight lang="java">
 +
import java.util.regex.Matcher;
 +
import java.util.regex.Pattern;
 +
 +
public class RegExp07 {
 +
 +
    public static void main(String[] args) {
 +
 +
        String content = "hanshunping s7789 nn1189han";
 +
 +
        /*
 +
        * 命名分组:即可以给分组取名
 +
        */
 +
        String regStr = "(?<g1>\\d\\d)(?<g2>\\d\\d)"; //匹配4个数字字符的字符串
 +
 +
        Pattern pattern = Pattern.compile(regStr);
 +
 +
        Matcher matcher = pattern.matcher(content);
 +
 +
        while (matcher.find()) {
 +
 +
            System.out.println("找到:" + matcher.group(0));
 +
 +
            System.out.println("找到第1个分组的内容:" + matcher.group(1));
 +
 +
            System.out.println("找到分组g1的内容:" + matcher.group("g1"));
 +
 +
            System.out.println("找到第2个分组的内容:" + matcher.group(2));
 +
 +
            System.out.println("找到分组g2的内容:" + matcher.group("g2"));
 +
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight><syntaxhighlight lang="console">
 +
找到:7789
 +
找到第1个分组的内容:77
 +
找到分组g1的内容:77
 +
找到第2个分组的内容:89
 +
找到分组g2的内容:89
 +
找到:1189
 +
找到第1个分组的内容:11
 +
找到分组g1的内容:11
 +
找到第2个分组的内容:89
 +
找到分组g2的内容:89
 
</syntaxhighlight>
 
</syntaxhighlight>

2022年11月18日 (五) 11:44的最新版本

https://www.bilibili.com/video/BV1Eq4y1E79W?p=13

常用分组构造形式 说明
(pattern) 非命名捕获。捕获匹配的子字符串。

编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号

(?<name>pattern) 命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。

用于name的字符串不能包含任何标点符号,并且不能以数字开头。

可以使用单引号替代尖括号,例如(?'name')

对比示例:应用分组前

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

public class RegExp07 {

    public static void main(String[] args) {

        String content = "hanshunping s7789 nn1189han";

        String regStr = "\\d\\d\\d\\d"; //匹配4个数组的字符串

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }
    }
}
找到:7789
找到:1189



示例:应用分组

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

public class RegExp07 {

    public static void main(String[] args) {

        String content = "hanshunping s7789 nn1189han";

        /*
         * 下面就是非命名分组
         * 说明
         * 1、matcher.group(0) 得到匹配到的字符串
         * 2、matcher.group(1) 得到匹配到的字符串的第1个分组
         * 3、matcher.group(2) 得到匹配到的字符串的第2个分组
         */
        String regStr = "(\\d\\d)(\\d\\d)"; //匹配4个数字字符的字符串

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

            System.out.println("找到第1个分组的内容:" + matcher.group(1));

            System.out.println("找到第2个分组的内容:" + matcher.group(2));

        }
    }
}
找到:7789
找到第1个分组的内容:77
找到第2个分组的内容:89
找到:1189
找到第1个分组的内容:11
找到第2个分组的内容:89


示例:在"hanshunping s7789 nn1189han" 匹配 "(\\d\\d)(\\d)(\\d)"

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

public class RegExp07 {

    public static void main(String[] args) {

        String content = "hanshunping s7789 nn1189han";

        /*
         * 下面就是非命名分组
         * 说明
         * 1、matcher.group(0) 得到匹配到的字符串
         * 2、matcher.group(1) 得到匹配到的字符串的第1个分组
         * 3、matcher.group(2) 得到匹配到的字符串的第2个分组
         */
        String regStr = "(\\d\\d)(\\d)(\\d)"; //匹配4个数字字符的字符串

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

            System.out.println("找到第1个分组的内容:" + matcher.group(1));

            System.out.println("找到第2个分组的内容:" + matcher.group(2));

            System.out.println("找到第3个分组的内容:" + matcher.group(3));

        }
    }
}
找到:7789
找到第1个分组的内容:77
找到第2个分组的内容:8
找到第3个分组的内容:9
找到:1189
找到第1个分组的内容:11
找到第2个分组的内容:8
找到第3个分组的内容:9



示例:通过命名分组

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

public class RegExp07 {

    public static void main(String[] args) {

        String content = "hanshunping s7789 nn1189han";

        /*
         * 命名分组:即可以给分组取名
         */
        String regStr = "(?<g1>\\d\\d)(?<g2>\\d\\d)"; //匹配4个数字字符的字符串

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

            System.out.println("找到第1个分组的内容:" + matcher.group(1));

            System.out.println("找到分组g1的内容:" + matcher.group("g1"));

            System.out.println("找到第2个分组的内容:" + matcher.group(2));

            System.out.println("找到分组g2的内容:" + matcher.group("g2"));

        }
    }
}
找到:7789
找到第1个分组的内容:77
找到分组g1的内容:77
找到第2个分组的内容:89
找到分组g2的内容:89
找到:1189
找到第1个分组的内容:11
找到分组g1的内容:11
找到第2个分组的内容:89
找到分组g2的内容:89