您的位置:首页 > 编程语言 > Java开发

Java 正则表达式入门

2017-07-23 15:43 232 查看

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() 方法,否则编译不通过


通过几个例子发现,正则表达式的精髓就在于怎么组合元字符,最好的方式就是用到一个学一个吧,就不多解释了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: