Java 正则表达式之分组

1. 分组

  • 分组由小括号组成,一个小括号是一组
  • 多层嵌套:左小括号开始,第一个左括号是第一组,第二个是第二组
# 不加小括号
regex = "\\d{3,5}[a-z]{2}"
# 加小括号
regex = "(\\d{3,5})([a-z]{2})"

2. group

2.1 group()

group() 等价 group(0)

public String group() {
    return group(0);
}

Matcher.group(0) 表示正则表达式中符合条件的字符串
Matcher.group(1) 表示正则表达式中符合条件的字符串中的第一个()中的字符串

public class RegexGroupDemo {

    public static void print(Object o) {
        System.out.println(o);
    }

    @Test
    public void digitMix() {
        Pattern pattern = Pattern.compile("(\\d{3,5})([a-z]{2})");
        Matcher matcher = pattern.matcher("123aa-12345bb-3434cc-55");

        while (matcher.find()) {
            print("group(): " + matcher.group());
            print(matcher.group(1) + "###" + matcher.group(2));
        }
    }

    @Test
    public void digitMix2() {
        Pattern pattern = Pattern.compile("\\d{3,5}[a-z]{2}");
        Matcher matcher = pattern.matcher("123a-12345bb-3434cc-55");
        while (matcher.find()) {
            print("group(): " + matcher.group());
        }
    }
}

2.2 group(int group)

private static final String GROUP_REGEX = "(name\\d+).*(code\\d+)";
private static final Pattern groupCompile = Pattern.compile(GROUP_REGEX);
@Test
public void groupMatch() {
    String data = "name123,code001,234code222,333code111,2323";
    Matcher groupMather = groupCompile.matcher(data);
    System.out.println(groupMather.groupCount());

    while(groupMather.find()) {
        print("group: " + groupMather.group());

        for (int i = 1; i <= groupMather.groupCount(); i++) {
            print("group" + i + ": " + groupMather.group(i));
        }
    }
}

3. 分组引用替换 ($)

示例:超过10个数字,改为字符串

@Test
public void test() {
    /**
     * {
     *     "1001": [
     *         "id": 1234567890123,
     *         "itemId": 123456789
     *     ],
     *     "1002": [
     *         "id": 12345,
     *         "itemId": 1234567890123
     *     ]
     * }
     */
    String jsonStr = "{\"1001\":[\"id\":1234567890123,\"itemId\":123456789],\"1002\":[\"id\":12345,\"itemId\":1234567890123]}";

    String result1 = jsonStr.replaceAll("(\\d{10,})", "\"$1\"");
    // result1: {"1001":["id":"1234567890123","itemId":123456789],"1002":["id":12345,"itemId":"1234567890123"]}

    String result2 = jsonStr.replaceAll("\"itemId\":(\\d{10,})", "\"itemId\":\"$1\"");
    // result2: {"1001":["id":1234567890123,"itemId":123456789],"1002":["id":12345,"itemId":"1234567890123"]}

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容