正则表达式

正则表达式:简单理解为符合一定规则的字符串。

(正:正确;则:规则)

一、正则表达式的常见组成规则(理解认识即可)

1.字符:

(1)x :字符x。eg:'a'表示字符a;

(2)\\:反斜线字符;

(3)\n:换行符;

(4)\r:回车符。

2.字符类:

(1)[abc]:a、b或c(仅表示其中一个)【简单类】;

(2)[^abc]:除了abc以外的任何字符【否定】;

(3)[a-zA-Z]:a到z或A到Z【范围】;

(4)[0-9]:0到9范围内的字符。

3.预定义字符类:

(1)· :任何字符;eg:如果就是表示  ·  这个字符本身,表示为\.;

(2)\d:数字[0-9];

(3)\D:非数字[^0-9];

(4)\w:单词字符[a-zA-Z0-9]。

4.数量词:

(1)X?:x出现一次或者0次;

(2)X*:0次或者0次以上(多次);

(3)X+:一次或者多次;

(4)X{n}:恰好n次;

(5)X{n,m}:至少n次,但不超过m次。

注:默认的话一般表示一次。

二、正则表达式的应用

1.判断功能:public boolean matches(String regex);

String类,matches()方法

案例:校验邮箱

import java.util.Scanner;
/*
 * 校验邮箱
 */
public class RegexDemo3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你的邮箱:");
		String email = sc.nextLine();
		//规则
		String regex = "\\w+@\\w{2,6}\\.\\w{2,3}";
		
		boolean flag = email.matches(regex); 
		System.out.println(flag);
	}

}

2.分割功能:String类的public String[] split(String regex)

import java.util.Scanner;

/*
 * 正则表达式的分割功能
 * String类的public String[] split(String regex)
 * 根据给定的正则表达式的匹配拆分此字符串
 * eg:年龄给定一个范围“18-24”,问如何得到int型数字
 */
public class RegexDemo4 {

	public static void main(String[] args) {
		//定义一个年龄搜索范围
		String ages = "18-24";
		//定义规则
		String regex = "-";
		
		//调用方法
		String[] strArray = ages.split(regex);
//		遍历
//		for(int i = 0; i < strArray.length; i ++) {
//			System.out.println(strArray[i]);
//		}
		//得到int类型的结果
		int startAge = Integer.parseInt(strArray[0]);
		int endAge = Integer.parseInt(strArray[1]);
		
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入年龄:");
		int age = sc.nextInt();
		if(age >= startAge && age <= endAge) {
			System.out.println("年龄符合要求");
		}else {
			System.out.println("请输入合法年龄");
		}
	}

}
/*
 * 分割功能案例
 */
public class RegexDemo5 {
	public static void main(String[] args) {
		String s1 = "aa,bb,cc";
		String[] str1Array = s1.split(",");
		for(int i = 0; i < str1Array.length; i ++) {
			System.out.println(str1Array[i]);
		}
		System.out.println("-----------------");
		
		String s2 = "aa.bb.cc";
		String[] str2Array = s2.split("\\.");
		for(int i = 0; i < str2Array.length; i ++) {
			System.out.println(str2Array[i]);
		}
		System.out.println("-------------------");
		
		String s3 = "aa   bb        cc";
		String[] str3Array = s3.split(" +");
		for(int i = 0; i < str3Array.length; i ++) {
			System.out.println(str3Array[i]);
		}
		System.out.println("-------------------");
		//D:\Develop\Java
		//我们应该用\\来代替\
		String s4 = "D:\\Develop\\Java";
		String[] str4Array = s4.split("\\\\");
		for(int i = 0; i < str4Array.length; i ++) {
			System.out.println(str4Array[i]);
		}
	}
	
}

 字符型数组转换成整形,排序后再转换为字符型输出:

import java.util.Arrays;

/*
 * 输入字符串“91 27 46 38 50”,
 * 对其进行排序并输出字符串“27 38 46 50 91”。
 */
public class RegexDemo6 {
	public static void main(String[] args) {
		String s1 = "91 27 46 38 50";
		String[] strArray = s1.split(" ");
		
		//转换成int型
		int[] arr = new int[strArray.length];
		for(int i = 0; i < strArray.length; i ++) {
			arr[i] = Integer.parseInt(strArray[i]);
		}
		//对数组进行排序
		Arrays.sort(arr);
		//把排序后的int数组再组装成一个字符串(拼接)
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < strArray.length; i ++) {
			sb.append(arr[i]).append(" ");
		}
		//转换为字符串
		String result = sb.toString().trim();
		
		System.out.println("result:"+result);
		
	}
}

3.替换功能:


/*
 * 替换功能
 * String类的public String[] replaceAll(String regex,String replacement)
 * 使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。
 */
public class RegexDemo7 {

	public static void main(String[] args) {
		String s = "Helloqq123456789world987654321java";
		
		//将字符串中所有的数字用‘*’替换掉
		String regex = "\\d+";
		String ss = "*";
		String result = s.replaceAll(regex, ss);
		System.out.println(result);
	}

}

4.获取功能:Pattern和Matcher类

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

/*
 * 获取功能
 * 案例:获取下面这个字符串中由3个字符组成的单词
 * da jia hao wo bu shi huai ren.
 */
public class RegexDemo8 {
	public static void main(String[] args) {
		String s = "da jia hao wo bu shi huai ren.";
		//规则    \\b单词边界
		String regex = "\\b\\w{3}\\b";
		//把规则编译成模式对象
		Pattern p = Pattern.compile(regex);
		//通过模式对象得到匹配器对象
		Matcher m = p.matcher(s);
		
//		调用匹配器对象的功能
//		通过find方法就是查找有没有满足条件的字串
//		public boolean find();
//		boolean flag = m.find();
//		System.out.println(flag);
//		
//		如何得到值
//		public String group();
//		String ss = m.group();
//		System.out.println(ss);
		
		//注意:再调用group()之前,必须先调用find()
		while(m.find()) {
			System.out.println(m.group());
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值