美文网首页js css html
Java 正则处理之 find(), group()

Java 正则处理之 find(), group()

作者: Tinyspot | 来源:发表于2023-01-13 20:55 被阅读0次

1. find()

  • 每调用一次 find() 方法,如果返回 true,就表示“找到一个匹配”
public class RegexDemo {
    private static final String regex = "\\d{3,5}";
    private static final Pattern pattern = Pattern.compile(regex);

    @Test
    public void find() {
        String str = "123-4567-00";
        Matcher matcher = pattern.matcher(str);

        // 找子串,找到一个子串,然后把该子串去掉
        print(matcher.find());
        print(matcher.find());
        print(matcher.find());

        print("=====================");

        // lookingAt 每次从头开始找
        print(matcher.lookingAt());
        print(matcher.lookingAt());
        print(matcher.lookingAt());
    }
    public static void print(Object o) {
        System.out.println(o);
    }
}

1.1 start() / end()

@Test
public void startfind() {
    String str = "123-4567-00";
    Matcher m = pattern.matcher(str);

    print(m.find() + "; " + m.start() + "-" + m.end());
    print(m.find() + "; " + m.start() + "-" + m.end());
    print(m.find());
    // p(m.start() + "-" + m.end()); 找不到会报错
}

3. group()

3.1 分组

  • 分组由小括号组成,一个小括号是一组
  • 多层嵌套:左小括号开始,第一个左括号是第一组,第二个是第二组

示例:

regex = "\\d{3,5}[a-z]{2}"  # 不加小括号
regex = "(\\d{3,5})([a-z]{2})"

3.2 group(0)

  • matcher.group() 等价 matcher.group(0)
  • Matcher.group(0) 表示正则表达式中符合条件的字符串。(整个匹配)
  • Matcher.group(1) 表示正则表达式中符合条件的字符串中的第一个()中的字符串
// java.util.regex.Matcher#group()
public String group() {
    return group(0);
}
@Test
public void group() {
    Pattern pattern = Pattern.compile("(\\d{3,5})([a-z]{2})");
    Matcher matcher = pattern.matcher("123aa-23232re-3434");
    while (matcher.find()) {
        print(matcher.group());
        print(matcher.group(1) + "###" + matcher.group(2));
    }
}
@Test
public void group2() {
    Pattern pattern = Pattern.compile("\\d{3,5}[a-z]{2}");
    Matcher matcher = pattern.matcher("123aa-23232re-3434");
    while (matcher.find()) {
        print("group(): " + matcher.group());
        print("group(0): " + matcher.group(0));
    }
}

3.3 替换

@Test
public void test() {
    // CASE_INSENSITIVE: Enables case-insensitive matching.
    Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher("java Java JaVA learnJAVA hellojAVA 2342342");
    // while (matcher.find()) {
    //     print(matcher.group());
    // }
    System.out.println(matcher.replaceAll("JAVA"));
}
private static final String regex = "java";
private static final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

@Test
public void replaceMent() {
    Matcher matcher = pattern.matcher("java Java JaVA learnJAVA hellojAVA 2342342");

    // 单双数
    StringBuffer buffer = new StringBuffer();
    int i = 0;
    while (matcher.find()) {
        i++;
        if (i % 2 == 0) {
            // 替换的结果放到 buffer
            matcher.appendReplacement(buffer, "java");
        } else {
            matcher.appendReplacement(buffer, "JAVA");
        }
    }
    // 把后面的添加到buffer
    matcher.appendTail(buffer);
    print(buffer);
}
@Test
    public void test() {
        String data = "wer1231xiao001,23423xiao222,333xing11,2323";
        // 是否匹配子串
        // subSequenceCompile.matcher(data).find() -- boolean
        // Pattern.matches(ENTIRE_REGEX, data);  等价 entireCompile.matcher(data).matches()
        Matcher subMatcher = subSequenceCompile.matcher(data);
        while(subMatcher.find()) {
            System.out.println(subMatcher.group()); // 等价 subMatcher.group(0);
        }

        Matcher groupMather = groupCompile.matcher(data);
        while(groupMather.find()) {
            System.out.println(groupMather.groupCount());
            // xiao001,23423xiao222,333xing11; group1:xiao001; group2:xing11
            System.out.println(groupMather.group() + "; group1:" + groupMather.group(1) + "; group2:" + groupMather.group(2));
        }
    }

相关文章

  • Java 正则处理之 find(), group()

    1. find() 每调用一次 find() 方法,如果返回 true,就表示“找到一个匹配” 1.1 start...

  • 详解java正则中的find

    在Java 中使用正则时,我们经常会用到find 和matches方法,二者的区别如下: find()方法在部分匹...

  • Java 正则处理之 Pattern

    1. 基础知识 1.1 特殊字符 \\ 代表其他语言中的一个 \数字 \\d反斜杠 \\\\点 \\.空白字符 \...

  • 爬虫 xpath

    一:回顾正则 find、rfind、replace 字符串处理函数只能处理固定的字符串baby hello 不能处...

  • Java正则表达式参考

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

  • 四、Shell编程中的常用工具

    文件查找之find命令 find命令总结 find出来的结果交给{}作为处理的中间结果,-exec 对文件处理的命...

  • re模块中search, findall, match等区别与用

    一、匹配对象以及group()和groups()方法: 当处理正则表达式时,除了正则表达式对象之外,还有另一个对象...

  • Python Re Group

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

  • python group()

    正则表达式中的三组括号把匹配结果分成三组group() 同group(0)就是匹配正则表达式整体结果group(1...

  • Java 正则表达式

    正则表达式定义了字符串的模式,可以用来搜索、编辑或处理文本。正则表达式可以用来搜索、编辑或处理文本。Java 正则...

网友评论

    本文标题:Java 正则处理之 find(), group()

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