美文网首页
Java 正则表达式之分组

Java 正则表达式之分组

作者: Tinyspot | 来源:发表于2023-10-25 12:26 被阅读0次

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"]}

}

相关文章

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • JS正则表达式的骚操作

    参考资料 《JS正则表达式的分组匹配》《正则表达式之捕获组/非捕获组介绍》《正则表达式中(?:pattern)、(...

  • 2019-05-07python学习记录-搜文本

    正则表达式 添加括号可以在正则表达式中加分组groups() 复数可以一次获得所有分组 | 用管道匹配多个分组? ...

  • 用Java实现网络爬虫二之Java正则表达式

    title: 用Java实现网络爬虫二之Java正则表达式tags: Java 网络爬虫 Spider Crawl...

  • Django的路由系统

    基本格式 分组命名匹配 在Python的正则表达式中,分组命名正则表达式组的语法是(?Ppattern...

  • iOS-正则表达式使用

    正则表达式与NSPredicate连用 正则表达式类 分组的使用 相关资料 常用正则表达式

  • javaEr正则表达式,split切片

    java正则表达式,split切片 1.java正则表达式语法demo // 编译正则表达式 Pattern ...

  • 5: 正则表达式 + 三剑客之grep

    3 正则表达式 正则表达式元字符分类: 字符匹配 次数匹配 位置锚定 分组 基本正则表达式: vim, grep,...

  • java 正则表达式 简单入门

    java 正则表达式用法 最近学习编译原理,要用到正则表达式。本次要学习如何用java正则表达式。正则表达式:可以...

  • Python Re Group

    python group() 正则表达式中,group()用来提出分组截获的字符串,()用来分组 究其因 正则表达...

网友评论

      本文标题:Java 正则表达式之分组

      本文链接:https://www.haomeiwen.com/subject/bwyeidtx.html