Java之路:正则表达式

首先来看个例子:

判断一个字符串是否由数字组成:

public class JudgeString {
	public static void main(String[] args) throws Exception
	{
		if(isNumber("123"))	{ // 判断字符串是否有数字组成
			System.out.print("由数字组成!");
		}
		else {
			System.out.print("不是由数字组成!");
		}
	}
	
	public static boolean isNumber(String str) {
		char[] data = str.toCharArray();
		for(char c : data) {
			if(c < '0' || c > '9') {
				return false;
			}
		}
		return true;
	}
}

【结果】
在这里插入图片描述

对于上面的例子有一个问题,这只是一个非常简单的验证,但是发现却写了21行代码,如果是一些更为复杂的验证,那么所需要编写的代码肯定更多。所以此时,代码可以简化为如下形式。

public class RegExp {
	public static void main(String[] args) throws Exception
	{
		/* "\\d+"实际上就以属于正则表达式的概念
		  * 正则开发包 : java.util.regex
		  * 正则开发包只提供了两个操作类:Pattern,Matcher 
		 * */
		if("123".matches("\\d+"))	{ // 利用正则表达式判断字符串是否有数字组成
			System.out.print("由数字组成!");
		}
		else {
			System.out.print("不是由数字组成!");
		}
	}
}

【结果】
在这里插入图片描述

在程序之中出现的“\d+”实际上就属于正则表达式的概念,发现使用正则可以简化不少的程序。

在JDK 1.4之前,Java本身是不具备正则的操作支持的,如果需要使用正则,则需要通过apache下载一个正则的开发包。而到了JDK 1.4之后,Java开始支持了正则,同时给出了java.util.regex开发包,此包提供了正则的操作类,在这个包之中只提供了两个操作类:Pattern、Matcher

可是在一般的开发之中很少去直接使用这两个类,在JDK 1.4之后对于String类进行了大量的修改,里面增加了与正则有关的操作方法,有如下几个方法是可以支持正则操作的。
在这里插入图片描述

正则标记

在正则操作之中,使用一系列的标记符号是一件非常重要的任务,不光是Java,只要是支持正则操作的程序,例如:JavaScript标记都是统一的。所有的标记都在java.util.regex.Pattern类提供,下面给出一些核心的正则标记:

(1)字符,表示单个字符,只能出现1位。

x :表示是一个指定的一位字符,例如:编写一个a,表示是字母a;
\\ :表示一位字符“\”,但是由于“\”有个数含义,所以使用“\\”表示一位“\”;
\n:匹配换行;

(2)字符范围,在指定的字符范围之中选1位,只能出现1位。

[abc]:表示可以是a、b、c中的任意一位;
[^abc]:表示不是a、b、c中的任意一位;
[a-zA-Z]:表示是任意一位字母(大写或小写);
[0-9]:表示是任意一位数字。

(3)简洁表达式,表示1位。

.:表示任意的一位字符;
\d:表示一位数字,等价于“[0-9]”;
\D:表示一位非数字,等价于“[^0-9]”;
\s:表示一位空格,等价于“[ \t\n\x0B\f\r]”;
\S:表示一位非空格,等价于“[…… \t\n\x0B\f\r]”;
\w:表示一位字母、数字、,等价于“[a-zA-Z0-9]”;
\W:表示一位非字母、数字、,等价于“[^a-zA-Z0-9]”;

(4)边界匹配,Java用不上。

^:表示正则的开头;
$:表示正则的结尾。

(5)数量表示,之前的正则每个符号只表示一位,如果要表示多位,则必须使用以下的数量关系。

正则?:表示此正则可以出现0次或1次;
正则+:表示此正则可以出现1次或多次;
正则*:表示此正则可以出现0次、1次或多次;
正则{n}:表示此正则出现正好n次;
正则{n,}:表示此正则出现n次以上;
正则{n,m}:表示此正则出现n ~ m次。

(6)逻辑操作。

正则1正则2:正则1之后紧跟正则2操作;
正则1|正则2:表示或的关系,有一套正则标记匹配即可;
(正则):表示按照一组来使用。

public class StringRegEx {
	public static void main(String[] args) throws Exception
	{
		String str = "a1b22c333d4444e55555f666666g";
		String regex1 = "[0-9]+";	// 数字出现一次或多次
		String regex2 = "\\d+";		// 数字出现一次或多次
		System.out.println(str.replaceAll(regex1, ""));
	}
}

【结果】
在这里插入图片描述

再来看一个例子:验证邮箱格式是否正确。

/* 验证邮箱格式
 */
public class EmailValidation {
	public static void main(String[] args) throws Exception 
	{
		String strEmail = "xingyun@163.com";
		String regex = "\\w+@\\w+.\\w+";
		System.out.println(strEmail.matches(regex));
	}
}

【结果】
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值