Java基础之认识正则表达式

正则表达式的优势

正则表达式有两个十分显著的优势:1.进行格式的匹配验证,即检测你的输入是否符合样式要求。2.进行复杂的字符串修改,如将字符串按要求分开,替换字符串,提取字符串内容。

什么是正则表达式

狭隘的说,正则表达式可以理解成一个字符串,这个字符串不涉及实际的内容,是对数据的格式要求。可配合String方法实现一系列功能。

那么这个字符串怎么写?这里暂举几个例子
以下字符串放在String的matches方法里就可实现注解的功能:
1."\\d" // 这个字符串表示它检测的数据必须只有一个数字,注意是“一个”
2."\\d+" //这个字符串表示它检测的数据必须全是数字,这里不限制数据的数量
3."\\w" //这个字符串表示它检测的数据必须只有一个字母数字下划线,加上+号,不限数量
4."\\W" //字母大写表示非,即检测的数据必须不是一个字母数字下划线,\\D也是如此
5."\\" //这里的\\表示检测的数据必须是一个/字符
6."\\s" //表示检测的数据必须是一个空格,换行符或者制表符
7."." //这里的点表示检测的数据可以是任意一个字符,也只能检测数据只有一个
8."[a-zA-Z] | \\d" //表示这个数据可以是一个英文字母也可以是一个0-9 的数字,|表示或
9."\\w+{2,3}" //之前的字符串只能检测单位数据或者全部数据,但只要加上{}可以控制数据的数量,如这里的2表示下限,3表示上限,可以检测2个或3个数据是否为字符
以上只是常见并不是所有,并且这些字符串是可以结合在一起使用的。
配合String的其他参数是String regex的方法也能实现其他一系列功能,如拆分,匹配,替换。

代码实战一下,要求简单检测输入的字符串是否是有效邮箱地址

import java.util.Scanner;

public class Demo1 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String str = in.nextLine();
		String regex = "[a-zA-z0-9]\\w+@\\w+{2,3}\\.(com|cn|gov)";
		System.out.println(str.matches(regex));
	}
}

正则表达式的Java包

一般来讲,正则表达式配合String的一些方法就能很好的解决问题,但是在有的时候还是有他的局限性,java.util.regex有两个类,Pattern 负责正则表达式的编译,Matcher负责具体的执行。如下例很难用String就做出来

假设,需要将一个字符串中的形如#{…}的部分全部取出,并且删去# { }这三个字符

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

public class Demo1 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String str = in.nextLine();
		String regex = "#\\{\\w+\\}";
		Pattern pn = Pattern.compile(regex);
		Matcher mr = pn.matcher(str);
		while(mr.find()) {
			System.out.println(mr.group().replaceAll("#\\{|\\}", ""));
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44078014/article/details/105415080