Java正则表达式

认识正则表达式

​ 现在假设有一个字符串需要你判断字符串是否由数字组成,如果由数字组成则将变为数字进行乘法运算。

//判断字符串是否全部由文字组成
public static boolean isNumber(String str){
        char[] chars = str.toCharArray();
        for (char charEach : chars) {
            if(charEach>'9'||charEach<'0'){
                return false;
            }
        }
        return true;
    }

public static void main(String[] args){
    String str="124";
    if(isNumber(str)){
        int num=Integer.parseInt(str);
        System.out.println(2*str);
    }
}

​ 实际上这种验证得功能是非常简单的,但是如此简单的程序却需要开发者编写大量程序逻辑代码,那么如果是更加复杂的验证呢?那么在这样的情况下,对于验证来讲最好的做法就是利用正则表达式来完成。

public static void main (Stirng []args){
    String str="124";
    if(str.matches("\\d+")){
        
    }
}

​ 正则表达式最早是从 Perl 语言里面发展而来的,而后在 JDK1.4 以前如果需要使用到正则表达式的相关定义则需要单独引入其他的 jar 文件,但是从 JDK1.4 之后,正则已经默认被 JDK 所支持,并且提供有 java.util.regex 开发包,同时针对于 String 类也提出进行了一些修改,使其可以有方法之间支持正则处理。

​ 使用正则最大特点在于方便进行验证处理,以及方便进行复杂字符串的修改处理。

常用正则标记

​ 如果要想进行正则的处理操作,那么就首先需要对常用的正则标记有所掌握,从JDK1.4 开始提供有 java.util regex 开发包,里边定义这个包里面提供有一-个Pattern 程序类,在这个程序类里面定义有所有支持的正则标记。

  1. 【数量:单个】字符匹配

    • 任意字符: 表示由任意字符组成
    • \: 匹配""
    • \n: 匹配换行
    • \t: 匹配制表符
  2. 【数量:单个】字符集(可以从里面任意选择一个字符)

    • [abc]: 表示可能是字母a b c 中的任意一个

  3. 【数量:单个】简化字符集

    • . : 表示任意一个字符
    • \d : 等价于"0-9"范围
    • \D: 等价于"[ ^0 -9]" 范围
    • \s: 匹配任意一位空格 可能是空格、换行、制表符
    • \S: 匹配任意的非空字符
    • \w: 匹配字母 数字 下划线 等价于“[a-zA-Z_0-9]
    • \W: 匹配非字母 数字 下划线
  4. 边界匹配

    • ^: 匹配边界开始
    • $: 匹配边界结束
  5. 数量表示。默认情况下只有添加了数量单位才可以匹配多位字符

    • 表达式?: 该正则可以出现0次或者多次
    • 表达式+: 该正则可以出现一次或多次
    • 表达式*: 该正则可以出现0次 一次或多次
    • 表达式{n}: 表达式的长度正好为次
    • 表达式{n}: 表达式的长度为n次以上
    • 表达式{n-m}: 表达式的长度在n-m次
  6. 逻辑表达式: 可以连接多个正则:

    • 表达式X 表达式Y: X表达式之后紧跟Y表达式
    • 表达式X|Y: 有一个表达式满足即可
    • (表达式): 为表达式设置一个整体描述 可以为整体描述设置数量单元

String 类对正则得支持

​ 在进行正则表达式大部分处理的情况下都会基于Spring类来完成,并且在spring类里提供有如下与正则有关的操作。

  1. 将指定字符串进行正则判断

    public boolean matches(String regex)
    
  2. 替换全部

    public String replaceAll(String regex,String replacement)
    
  3. 替换首个

    public  String replaceFirst(String regex,String replacement)
    
  4. 正则拆分

    public String[] split(String regex)
    
  5. 正则拆分 拆分成指定的个数

    poublic String[] split(String regex,int limit)
    

示例 实现字符串替换(删除非字母和数字)

 String str="jjagj&*%$hj#^";
 String regex="[^a-zA-Z0-9]+";
 System.out.println(str.replaceAll(regex," "));

示例 是啊字符串的拆分

 String str="a1b22c333";
        String regex="\\d+";//正则表达式     要注意使用\\d+和\\d的区别
        String result[]=str.split(regex);
        for(int x=0;x<result.length;x++){
            System.out.print(result[x]+"、");
        }

​ 在正则处理的时候替换和拆分的操作相对简单一点,比较麻烦的是数据验证部分。

示例 判断一个数据是否是小数 如果是小数则则将其转换为double

 String str="111.11";
 String regex="\\d+(\\.\\d+)?";//小数点和小数位同时出现
 System.out.println(str.matches(regex));

示例 判断一个字符串是否由日期所组成,如果由日期所组成将其转换为data类型

  String str="2019-10-11";
  String regex="\\d{4}-\\d{2}-\\d{2}";
  if(str.matches(regex)){
      System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
   }

​ 许哟啊注意的是正则无法对里面的内容进行判断,只能够对格式进行判断

示例 判断给定的电话号码是否正确

电话号码: 51283346 \\d{7,8}

电话号码: 01051283346 (\\d{3,4})?

电话号码: (010)-51283346。\(\\d{3,4}\)

 String str="(010)51283346";
 String regex="((\\d{3,4})|(\\(\\d{3,4}\\)))?\\d{7,8}";
 System.out.println(str.matches(regex));

示例 验证email地址格式

email的用户名可以由字母、数字、下划线所组成(不应该以_开头)

email 的域名可以由字母、数字、_、-所组成

域名的后缀必须是.cn 、.com 、 .net、.com.cn、.gov所组成

   String str="12345@qq.com";
   String regex="[a-zA-Z0-9]\\w+@\\w+\\.(cn|com|com.cn|gov)";
   System.out.println(str.matches(regex));

java.util.regex包支持

​ 虽然在大部分的情况下都可以以利用 String 类实现正则的操作,但是也有一 些情况下需要使用到 java.util.regex 开发包中提供的正则处理类。

​ 在这个包里面一共定义有两个类: Pattern (正则表达式编译)、Matcher (匹配)。

  1. Parttern 类提供由正则表达式的编译类支持:public static Pattren complie(String regex)

    同时也提供由字符串的拆分操作: public String [] split(CharSequence input)

    String str="haghhag*hahg&^%hhhkk";
            String regex="[^a-zA-Z]+";
            Pattern pat=Pattern.compile(str);//编译正则表达式
            String[] split = pat.split(regex);
    
  2. Matcher类实现正则匹配的处理类,这个类对象的实例化依赖Pattern来完成.

    Partten类中提供的方法 public Matcher matcher(CharSequence input)

    当获取到Matcher类的对香港之后就可以利用该类中的方法进行如下操作

    //正则匹配
    public boolean matchers()
    //字符串替换
    public String repalceAll(String replacement)
    

示例 字符串匹配

String str="101";
String regex="\\d+";
Pattern pat=Pattern.compile(regex);//编译正则表达式
Matcher matcher = pat.matcher(str);
System.out.println(matcher.matches());

​ 如果纯粹是以拆分、替换、匹配三种操作为例根本用不到java.util.regex开发包,只依赖String类就可以实现了,但是matcher类中提供由一种分组的功能,而这种分组的功能是String不具备的。

//        要求取出#{}标记中的所有内容
       String str="INSERT INTO dept(deptno,dname,loc) values(#{deptno},#{dname},#{loc}})";
       String regex="#\\{\\w+\\}";
       Pattern pat = Pattern.compile(regex);
        Matcher matcher = pat.matcher(str);
        while(matcher.find()){//是否由匹配成功的内容
            //分组
//            #{deptno}#{dname}#{loc}
            System.out.print(matcher.group());
//            deptnodnameloc
            Syst

​ java.util.regex开发包如果不是进行一些更为复杂的正则处理是很难用到的,而String 类所提供的功能只适合于简单的正则操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值