怎么使用正则表达式

发布时间:2021-10-15 14:06:51 作者:iii
来源:亿速云 阅读:141

本篇内容介绍了“ 怎么使用正则表达式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、前言

编程总在实践中出结果!

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

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

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

二、规则

1. 常用符号

2. 字母字符

3. 预定义字符

4. POSIX 字符

5. Character 类

6. Unicode 块和类别的类

7. 边界匹配器

8. Greedy 数量词

9. Reluctant 数量词

10. Possessive 数量词

11. Logical 运算符

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 去除><号匹配
Pattern p = Pattern.compile("(?!>).+(?=<)");
Matcher m = p.matcher(">小傅哥<");
while (m.find()) {
    System.out.println(m.group());
}
2.9 向前引用
Pattern p = Pattern.compile("(\\d\\d)\\1");
Matcher m = p.matcher("1212");
System.out.println(m.matches());

“ 怎么使用正则表达式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. golang使用正则表达式使用
  2. 正则表达式使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:jQuery面试题有哪些

下一篇:常见web攻击有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》