博客:

沉淀、分享、成长,让自己和他人都能有所收获!

目录

三、案例

四、总结

五、系列推荐

一、前言

编程总在实践中出结果!

正则表达式,又称规则表达式。(英语:正则w,在代码中常简写为regex、或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本

正则引擎主要可以分为两大类:一种是DFA,一种是NFA。这两种引擎都有了很久的历史(至今二十多年),当中也由这两种引擎产生了很多变体!于是POSIX的出台规避了不必要变体的继续产生。这样一来正则w,主流的正则引擎又分为3类:一、DFA,二、传统型NFA,三、POSIX NFA。

正则也是一种非常有意思的技术,但往往不知道这些符号的编程在实际使用中该如何使用,因此总结了本篇文章,方便所有小伙伴可以当成一个工具文章使用,方便处理一些需要使用正则的技术内容。

二、规则1. 常用符号2. 字母字符3. 预定义字符4. POSIX 字符5. 类6. 块和类别的类7. 边界匹配器8. 数量词9. 数量词10. 数量词11. 运算符12. Back 引用13. 引用14. 特殊构造(非捕获)三、案例1. 字符匹配

"a".matches(".")

"a".matches("[abc]")

"a".matches("[^abc]")

"A".matches("[a-zA-Z]")

"A".matches("[a-z]|[A-Z]")

"A".matches("[a-z(A-Z)]")

"R".matches("[A-Z&&(RFG)]")

"a_8".matches("\w{3}")

"\".matches("\\")

"hello sir".matches("h.*")

"hello sir".matches(".*ir$")

"hello sir".matches("^h[a-z]{1,3}o\b.*")

"hellosir".matches("^h[a-z]{1,3}o\b.*")

" n".matches("^[\s&&[^\n]]*\n$")

System.out.println("java".matches("(?i)JAVA"));

2. 模式匹配2.1 验证匹配

Pattern p = Pattern.compile("[a-z]{3,}");
Matcher m = p.matcher("fgha");
System.out.println(m.matches()); // true,匹配字符3次及以上

2.2 匹配功能

Pattern p = Pattern.compile("\d{3,5}");
Matcher m = p.matcher("123-4536-89789-000");
System.out.println(m.matches());
m.reset();// 把吃进去的字符吐出来重新匹配,否经过m2.matches会吃进去字符 下面的匹配就不成功
System.out.println(m.find());
System.out.println(m.start() + "-" + m.end());  // 找到了 就把首位位置打印下(必须找到才能打印)
System.out.println(m.find());
System.out.println(m.start() + "-" + m.end()); // 找到了 就把首位位置打印下(必须找到才能打印)
System.out.println(m.find());
System.out.println(m.start() + "-" + m.end()); // 找到了 就把首位位置打印下(必须找到才能打印)
System.out.println(m.find());
System.out.println(m.lookingAt());              //每次都是才头上开始找

测试结果

false
true
0-3
true
4-8
true
9-14
true
true

2.3 匹配普通替换

Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java_Java_jAva_jAVa_IloveJava");
System.out.println(m.replaceAll("JAVA"));

2.4 匹配逻辑替换

Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java_Java_jAva_jAVa_IloveJava fdasfas");
StringBuffer sb = new StringBuffer();
int i = 0;
while (m.find()) {
    i++;
    if (i % 2 == 0) {
        m.appendReplacement(sb, "java");
    } else {
        m.appendReplacement(sb, "JAVA");
    }
}
m.appendTail(sb);
System.out.println(sb);

2.4 分组匹配

Pattern p = Pattern.compile("(\d{3,5})([a-z]{2})");
Matcher m = p.matcher("123bb_78987dd_090po");
while(m.find()){
    System.out.println(m.group(1));
}

2.5 贪婪的匹配与不贪婪匹配

Pattern p = Pattern.compile("(.{3,10}?)[0-9]");
Matcher m = p.matcher("aaaa5dddd8");
while (m.find()) {
    System.out.println(m.start() + "-" + m.end());
}

2.6 普通捕获

Pattern p = Pattern.compile(".{3}");
Matcher m = p.matcher("ab4dd5");
while(m.find()){
    System.out.println(m.group());
}

2.7 非捕获组(?=a)

 Pattern p = Pattern.compile(".{3}(?=a)");           
 Matcher m = p.matcher("ab4add5");
 while (m.find()) {
     System.out.println("后面不能是a的:" + m.group());
 }

Pattern p = Pattern.compile("(?!a).{3}");           
Matcher m = p.matcher("abbsab89");
while (m.find()) {
    System.out.println("前面不能是a的:" + m.group());
}

2.8 去除>

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注