博客:
❝
沉淀、分享、成长,让自己和他人都能有所收获!
❞
目录
三、案例
四、总结
五、系列推荐
一、前言
编程总在实践中出结果!
正则表达式,又称规则表达式。(英语:正则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 去除>
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。