正则表达式

正则表达式(Regex)

正则表达式是一种最早起源于Perl语言的特殊字符串技术,可以通过一些固定的模式编写一些特殊的字符串,通过对这些特殊字符串使用,可以有效的进行表单验证(手机,邮箱,网址等输入格式的检查),以及一些数据的爬取,包括字符替换等功能;因此,正则表达式是一项非常强大的表达式语言。

Java中对正则表达式的支持主要通过以下几个类:

  • java.lang.String 字符串类

  • java.util.regex.Pattern 正则表达式的编译器类

  • java.util.regex.Matcher 正则表达式的匹配器

一个字符的匹配:

.:表示中间任意字符

[abc]:范围匹配,匹配a或b或c

[0-9]:0到9之间的所有字母

[a-z]:表示a到z之间的所有字母

[b-[^abc]]除了abc都是true

多个字符的匹配:

(a|aa|aaa|b):匹配a或者aa或者aaa或者b

*:任意次数(紧挨着左边的那个字符,出现的次数)

+:一次或者多次(至少一次)

{n,m}:n到m次

{n}:必须出现n次

{3,}至少3次

?:一次或者0次

简单的正则表达式例子:

手机号: ^1[3456789]\\d{9}$

解析:

观察以上表达式,被匹配的字符串,必须以数字1开后,后面第二数只能为3,4,5,6,7,8,9中的其中一个,从第三位开始后面一共包含9位数字,并且以数字结尾。

实现如下

public class RegexDemo {
​
    public static void main(String[] args) {
        
        String regex = "^1[3456789]\\d{9}$";
        
        String phone = "15876578979";
        //判断当前字符串对象是否匹配给定的正则表达式
        //System.out.println(phone.matches(regex));
        
        //对指定的表达式编译,获取一个编译器对象
        Pattern p = Pattern.compile(regex);
        //对目标字符串获取匹配器
        Matcher m = p.matcher(phone);
        //尝试匹配
        boolean result = m.matches();
        System.out.println(result);
    }
​
}

基本语法

public class RegexDemo2 {
​
    public static void main(String[] args) {
        
        //判断指定字符是否是表达式中包含的其中一个
        System.out.println("c".matches("[xyz]")); 
        //是否不匹配指定的表达式
        System.out.println("y".matches("[^xyz]")); 
        //匹配内容是否是表达式中的其中一个字符?
        System.out.println("8".matches("[a-zA-Z0-9]")); 
        
        //匹配数字
        System.out.println("7".matches("[0-9]"));
        System.out.println("7".matches("\\d")); 
        
        //匹配非数字
        System.out.println("a".matches("[^0-9]"));
        System.out.println("b".matches("\\D")); 
​
        //匹配空格或制表符
        System.out.println(" ".matches("[ \t]"));
        
        //判断输入的字符串是否是5位数字
        System.out.println("56432".matches("[0-9]{5}")); 
        System.out.println("56432".matches("\\d{5}")); 
        
        //判断输入的内容是否是英文字母和数字组合,并且长度在6-12之间?
        System.out.println("softeem123".matches("[0-9_a-zA-Z]{6,12}")); 
        System.out.println("softeem123".matches("\\w{6,12}")); 
        
        //验证输入的内容是否是5位长度以上的字符串?"."表示任何字符
        System.out.println("你好世界softeem".matches(".{5,}"));
        
        //验证输入的内容是否是一个字符以上
        System.out.println("中".matches(".+")); 
        
        //编写一个邮箱地址的正则表达式? 
        // softeem123@qq.com
        String regex = "\\w+@\\w+\\.\\w+";
        System.out.println("softeem123@qq.cn".matches(regex));
        
        //编写一个网址的正则表达式
        // http://www.softeem.com
        // https://daily.softeem.top.cn;
        regex = "((http://)|(https://))((\\w+)|(\\.))+";
        System.out.println("http://www.softeem.com.cn".matches(regex)); 
        
        String phone = "姓名:XX;tel:13657872212";
        System.out.println(phone.matches("^1[3456789]\\d{9}$")); 
    }
​
}
​

正则表达式的核心功能:

  1. 匹配

  2. 查找

  3. 替换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值