正则表达式

1 正则表达式基本知识

1.1 定义

  • 是用来匹配字符串的一种模式
  • 是文本处理中常用的工具
  • 主要应用包括:匹配验证、分割、查找、替换

1.2 正则表达式的写法

  • 字符{数量}位置
  • 如 [0-9]{2,4}\b 可以匹配 123 1988 2015 16

1.3  正则表达式的基本元素

符号含义描述
.代表一个字符的通配符能和回车符之外的任何字符匹配
[]字符集能和括号内任何一个字符相匹配,方括号内也可以表示一个范围,用"-"符号将起始和末尾字符区分开来,如[0-9]
[^]排斥性字符集和集合之外的任意字符匹配
^起始位置定位到一行的起始处并向后匹配
$结束为止定位到一行的结尾处并向前匹配
\b单词边界 
\B非单词边界 
()按照子表达式进行分组
|或关系的逻辑选择,通常与组结合使用
\转义匹配反斜杠符号之后的字符,所以可以匹配一些特殊字符,如$,|等

 

 

 

 

 

 

 

 

 

关于数量

符号含义描述
*零个或多个匹配表达式首项字符的零个或者多个副本
+一个或者多个匹配表达式首项字符的一个或者多个副本
?一个或零个匹配表达式首项字符的一个或者零个副本
n重复匹配表达式首项字符的n个副本

 

 

 

 

 

关于字符

符号含义描述
\d数字相当于[0-9]
\D非数字相当于[^0-9]
\s空白符相当于[\t\n\c0B\f\r]
\S非空白符相当于[^\S]
\w单词字符相当于[A-Za-z_0-9]
\W非单词字符相当于[^\W]

 

 

 

 

 

 

2 java API中正则表达式类

  • 包:java.util.regex
  • 主要类:Pattern类/Matcher类

2.1 应用1:分割 split

示例:

import java.util.regex.*;


public class RegexSplitter {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Pattern p = Pattern.compile("[;,\\s0-9]+");
        String[] splits = p.split("add;df,ds kk    dd09fgh");
        for(String splitter : splits){
            System.out.println(splitter);
        }
    }

}

输出结果:
add
df
ds
kk
dd
fgh
View Code

2.2 应用2:匹配验证 Pattern.matches()

示例:判断Email是否合法

import java.util.regex.*;


public class RegexEmailValidate {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String pattern = "^[^@]+@[\\w]+(\\.[\\w]+)*$";
        String email = "pe-n.g1 2A_d@midea.com.cn";
        boolean b = Pattern.matches(pattern,email);
        if(b)
            System.out.println("邮箱号可用\n");
        else
            System.out.println("邮箱号不可用\n");
    }

}
View Code

2.3 应用3:替换查找 Matcher类

  • Matcher类:通过调用某个模式(Pattern对象)的matcher方法可以得到Matcher对象
  • Matcher类的方法:find方法将扫描输入序列,寻找下一个与模式匹配的地方;appendReplacement方法
  • Matcher中的group是指正则表达式中一对圆括号括起来的一部分;group(0)或group()表示整个匹配项,group(1)、group(2)…表示各个分组
  • 替换时,$0表示整个匹配项,$1、$2…表示各个分组(圆括号)

示例1:

import java.util.regex.*;


public class RegexReplacement {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Pattern pattern = Pattern.compile("cat");
        Matcher matcher = pattern.matcher("one cat; dacatd de cad");
        StringBuffer sb = new StringBuffer();
        while(matcher.find()){
            matcher.appendReplacement(sb, "big $0");
        }
        matcher.appendTail(sb);
        System.out.println(sb.toString());
    }

}

输出结果:
one big cat; dabig catd de cad
View Code

 示例2:group的应用

import java.util.regex.*;


public class RegexHref {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String regex = "\\s*(href|src)\\s*=\\s*((\"[^\"]*\")|(\'[^\']*\')|([^\'\">\\s]+))";
        String text = 
                "<a href=\"http://aaa.htm\">bbb</a> <img src=\'http://bb.com/pic.jpg\'>"
                + "<img src= http://bdfb.com/pic.jpg >";
        Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(text);
        MatchResult result = matcher.toMatchResult();
        StringBuffer buffer = new StringBuffer();
        int i = 0;
        while(matcher.find()){
            //整个捕获,相当于goup(0)
            i++;
            buffer.append("获捕到" + matcher.group()); 
            //捕获中的一部分(第2对圆括号对应的,即是网址)
            buffer.append(" 其中网址为" + matcher.group(2)); 
            buffer.append("\r\n");
        }
        System.out.println(buffer.toString() + i);
    }

}
View Code

总结:

  • group(n)分类法则

  • find()所遍历出的group大组,取决于实际字符串中对应匹配模式的字符串数目

转载于:https://www.cnblogs.com/penghuster/p/4859828.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值