Java温故而知新-正则表达式

107 篇文章 1 订阅


判断字符串是不是数字

传统写法

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        String str = "12023239023" ; // 全部由数字所组成
        System.out.println(isNumber(str));
    }
    /**
     * 该方法的主要功能是验证字符串是否全部由数字所组成
     * 只要方法的返回值类型为boolean,一般都是以isXxx()的形式命名的
     * @param message 要验证的字符串信息
     * @return 如果字符串全部由数字所组成返回true,否则返回false
     */
    public static boolean isNumber(String message) {
        for (int x = 0 ; x < message.length() ; x ++) {
            if (message.charAt(x) < '0' || message.charAt(x) > '9') {   // 不是数字编码
                return false ; // 后面就不再需要进行验证了
            }
        }
        return true ; // 如果没有问题返回一个true,表示验证正确
    }
}

正则表达式实现

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        String str = "12023239023" ; // 全部由数字所组成
        System.out.println(str.matches("\\d+")); // 正则验证
    }
}

正则表达式的历史

在这里插入图片描述

常用的正则标记

在这里插入图片描述

1单个字符匹配

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        String str = "a" ; // 字符串
        System.out.println(str.matches("a")); // 正则验证
    }
}

下面只写核心代码,main方法略。

String str = "\\" ; // 字符串
// "\\\\"正确的字符串定义描述的是“\\”,但是“\\”如果要变为正则的匹配那么最后转换为“\”
System.out.println(str.matches("\\\\")); // 正则验证
String str = "a\t" ; // 字符串
System.out.println(str.matches("a\t")); // 正则验证
String str = "yootk\n" ; // 字符串
System.out.println(str.matches("yootk\n")); // 正则验证

2字符范围(未加入任何的量词描述,只表示1位)

在这里插入图片描述

指定字母集合中的任意一个字符

String str = "k" ; // 字符串
System.out.println(str.matches("[yotk]")); // 正则验证

不包含指定字母(反)

String str = "m" ; // 字符串
System.out.println(str.matches("[^yotk]")); // 正则验证

匹配a-z A-Z所有字母[a-zA-Z]

String str = "M" ; // 字符串
System.out.println(str.matches("[a-zA-Z]")); // 正则验证

3.简化表达式

在这里插入图片描述

.表示任意的字符

String str = "1" ; // 字符串
System.out.println(str.matches(".")); // 正则验证

\d匹配任意的一位数字,等价于[0-9]

String str = "1" ; // 字符串
System.out.println(str.matches("\\d")); // 正则验证

\D 匹配任意的一位非数字,等价于[^0-9]

String str = "a" ; // 字符串
System.out.println(str.matches("\\D")); // 正则验证

\s匹配任意空格

String str = "\n" ; // 字符串
System.out.println(str.matches("\\s")); // 正则验证

\S匹配任意非空格,等价于[^\s]

String str = "\n" ; // 字符串
System.out.println(str.matches("\\S")); // 正则验证

\w匹配字母、数字、下划线

String str = "1" ; // 字符串
System.out.println(str.matches("\\w")); // 正则验证

\W非匹配字母、数字、下划线等价于[^\w]

String str = "1" ; // 字符串
System.out.println(str.matches("\\W")); // 正则验证

4.边界匹配

在这里插入图片描述
Java中使用不明显。

5.数量表达式(所有的表达式只有与数量匹配之后才可以描述多个字符)

?表示该正则表达式匹配之后可以描述多个字符

String str = "" ; // 字符串
System.out.println(str.matches("\\w?")); // 正则验证

*出现0次、1次或者多次

String str = "aaaaa" ; // 字符串
System.out.println(str.matches("\\w*")); // 正则验证

+出现1次或者多次

String str = "a" ; // 字符串
System.out.println(str.matches("\\w+")); // 正则验证

{n}正好出现n次

String str = "yootk.com" ; // 字符串
System.out.println(str.matches("\\w{5}")); // 正则验证

{n,}正好出现n次以上

String str = "yootk_com" ; // 字符串
System.out.println(str.matches("\\w{5,}")); // 正则验证

{n,m}出现n~m次

6.逻辑运算(可以连接多个正则表达式)

在这里插入图片描述

String str = "yootk.com" ; // 字符串
System.out.println(str.matches("yootk.+")); // 正则验证
String str = "yootk.com" ; // 字符串
System.out.println(str.matches("yootk|.+")); // 正则验证

正则表达式实例

去除非字写字母的字符

 String str = "yU*()&*()#@JKILoFFLKFSD*()*(*(o*()@#*()@#*()@#t*()#U*()@$@#@k.com" ; // 字符串
String regex = "[^a-z]" ; // 定义正则表达式
System.out.println(str.replaceAll(regex, "")); // 正则验证

按数字拆分字符串

String str = "yootk.com828238edu.yootk.com8923892389yootk.ke.qq.com" ; // 字符串
String regex = "\\d+" ; // 定义正则表达式
String result [] = str.split(regex) ; // 正则拆分
for (String temp : result) {
    System.out.println(temp);
}

数值格式化之前校验

String str = "9889118" ; // 字符串
String regex = "\\d+" ; // 定义正则表达式
if (str.matches(regex)) {   // 是否符合于正则规则
    System.out.println("【字符串转换数字】" + Integer.parseInt(str));
} else {
    System.out.println("【ERROR】当前的字符串不符合正则规则,无法转换为int型");
}

日期格式化正则校验

import java.time.LocalDateTime;
import java.util.Date;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    public static DateTimeFormatter datetimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") ;
    public static ZoneId zoneId = ZoneId.systemDefault() ; // 获取当前时区的ID
    public static void main(String[] args) throws Exception {
        String str = "1998-02-19 21:15:23" ; // 字符串
        String dateRegex = "\\d{4}-\\d{2}-\\d{2}" ; // 日期正则匹配
        String datetimeRegex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}" ; // 日期时间正则匹配
        if (str.matches(dateRegex)) {
            LocalDate localDate = LocalDate.parse(str, dateFormatter) ;
            Instant instant = localDate.atStartOfDay().atZone(zoneId).toInstant() ;
            Date date = Date.from(instant) ;
            System.out.println("【字符串转日期】" + date);
        }
        if (str.matches(datetimeRegex)) {
            LocalDateTime localDateTime = LocalDateTime.parse(str, datetimeFormatter) ;
            Instant instant = localDateTime.atZone(zoneId).toInstant();
            Date date = Date.from(instant) ;// 转换
            System.out.println("【字符串转换日期时间】" + date);
        }
    }
}

匹配电话号码

String str = "008611066789109" ; // 字符串
String regex = "((\\+|00)\\d{2})?\\d{11}" ; // 日期正则匹配
System.out.println(str.matches(regex));

匹配邮箱

 String str = "muyan.yootk-lixinghua@yootk.com" ; // 字符串
 String regex = "[a-zA-Z_][a-zA-Z0-9\\-_\\.]+@[a-zA-Z0-9\\-]+\\.(com|com\\.cn|net|net\\.cn|gov|edu)" ; // 日期正则匹配
 System.out.println(str.matches(regex));

匹配内部并输出

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        String sql = "INSERT INTO dept(deptno,dname,loc) VALUES (#{deptno}, #{dname}, #{loc})" ; // 字符串
        String regex = "#\\{\\w+\\}" ; // 日期正则匹配
        Pattern pattern = Pattern.compile(regex) ; // 编译正则
        Matcher matcher = pattern.matcher(sql) ; // 创建正则匹配对象
        while(matcher.find()) {
            String name = matcher.group(0) ;
            System.out.print(name.replaceAll("#|\\{|\\}", "") + "、");
        }
    }
}

教程来源

官网:
沐言优拓https://www.yootk.com/
教程地址:
《【李兴华编程训练营】Java完全自学教程》
https://www.bilibili.com/video/BV1PE41187Vd

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值