Java 正则表达式入门

Java 正则表达式入门

正则表达式是什么?

编程中时常会遇到解析字符串的问题,比如判断一个字符串是否是邮箱,判断一个字符串是否是电话号码等。甚至需要提取字符串中的某些部分。

可能你会说这很简单啊, String 类那么强大,我每次都是用它来进行字符串处理的。可是这对于复杂的字符串其实是很难的,需要写大量的逻辑代码,可能花了好大力气,程序写的还不够健壮。而正则表达式正好可以轻松的解决字符串的处理问题。

最早, 正则表达式是科学家提出来解决自然语言识别的一种技术,现在它已经成为了一种解析字符串的工具,各编程语言都对正则表达式提供了支持。

其实,本质上程序还是执行了大量的处理,只是这种技术帮我们代劳了,程序员只要使用它暴露出来的方法去调用就可以了,这就是俗称的造轮子和搬砖。

正则表达式其实就是由普通字符(大小写字母,数字)和特殊字符(也称元字符)组成的一个字符串模板,如:.+/(.+)$ 。这是最难的,也是最重要的,如果你不想全部弄懂,也可以需要时去网上搜,这样也可以。

下面展示下常用的元字符的用法:

这里写图片描述

Java 中怎么使用正则表达式呢?

Java 提供了两个类来供程序员使用正则表达式,分别是 Pattern 和 Matcher ,它们都位于 java.util.regex 包中。

这两个类都使用了 final 关键字修饰,就是说他们不想要别的类去继承他,他们要保证自己的不可替代性,而且都没有构造函数。

使用模板:

Pattern p = Pattern.compile(regex);
 //此方法把正则表达式模板封装成Pattern (模板)对象

Matcher m = p.matcher(path);
//通过此方法将模板对象和字符串匹配,得到的结果封装成 Matcher (匹配器) 对象中,通过这个匹配器对象的方法可以得到匹配的所有信息。

下面展示几个例子:

提取路径后的文件名

    String path = "C:/a/n/note.txt";
    String regex = ".+/(.+)$";//正则表达式模板
    Pattern p = Pattern.compile(regex);//此方法把正则表达式模板封装成Pattern (模板)对象
    Matcher m = p.matcher(path);//通过此方法将模板对象和字符串匹配,得到的结果封装成 Matcher (匹配器) 对象中,通过这个匹配器对象的方法可以得到匹配的所有信息。
    if(!m.find()) {
        System.out.println("格式不对");
    }else {
        System.out.println(m.group(1));
    }

判断是否为邮箱号码,即必须为六位数号码

System.out.println(Pattern.matches("[0-9]{6}", "332200"));//如果只匹配一次,可以直接调用 Pattern 的 matches() 方法,这样更方便,匹配成功返回 true,否则返回 false 。
System.out.println(Pattern.matches("\\d{6}", "a32200"));

判断是否是身份证号码,即判断是否是 15 或 18 位数字

System.out.println(Pattern.matches("\\d{15}|\\d{18}", "360481199601262616"));

判断是合法的邮箱地址

boolean IsEmail(String email){
    Pattern p = p.compile("[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+");
    Matcher m = p.matcher(email);
    if(m.matches()){
        System.out.println("合法");
    }else {
        System.out.println("不合法");
    }
}

解析 URL

String path = "http://www.csdn.net/article/1970-01-01/2819623";
String regex = "([a-zA-Z]+)://([^/:]+)([^#]*)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(path);
if(!m.find()) {
    System.out.println("格式不对");
}else {
    System.out.println(m.group(1));
    System.out.println(m.group(2));
    System.out.println(m.group(3));
}

//使用 Matcher 的 group() 方法一定要事先调用 find() 方法,否则编译不通过

通过几个例子发现,正则表达式的精髓就在于怎么组合元字符,最好的方式就是用到一个学一个吧,就不多解释了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值