正则表达式

1.【单个】描述某一个字符
x:表示由x所组成;
\:匹配“\”;
\t:描述的是制表符;
\n:表示换行;

2、【单个】描述一个范围:
[abc]:表示可能是字母a、b、c中的任意一个;

3、【单个】简化表达式:
“.”:表示任意的一位字符;
\d: 等价于“[0-9]”表示任意一位的数字;
\D:等价于“[^0-9]”表示任意的非数字;
\s :表示是一个空格,可能是空格、\t、\n;
\S:表示不是一空格;
\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、逻辑匹配
正则A正则B:就表示与的关系在第一个匹配之后立即匹配第二个
正则A|正则B:表示A或B正则出现一次;
(正则):按照一组正则进行处理。

**

二、String类对正则的支持

**

public class TestString {
	public static void main(String[] args) throws Exception {
		String str = "ajjk57513qedad45a7fa45q74%^&&*&%#$ hqjkhjs jkjk";
		String regex = "[^a-zA-Z]"; // 正则,不是字母
		// 按照正则表达式替换所有
		String s1 = str.replaceAll(regex, "");// 把不是字母的替换成空
		System.out.println(s1);

		String str2 = "a24a54w724575e87545e44e5e5s";
		String regex2 = "\\d+"; // 正则[0-9]
		// 按照正则表达式进行拆分
		String[] result = str2.split(regex2);
		for (int i = 0; i < result.length; i++) {
			System.out.println(result[i]);
		}
		System.out.println("-------------------------");
		// 验证是否为整数或小数,如果是装换为double类型
		String str3 = "1125.235";
		String regex3 = "\\d+(\\.\\d+)?";// 小数点前的数字出现一次以上,小数点后的数字可以不出现,可以出现
		if (str3.matches(regex3)) {
			double d = Double.parseDouble(str3);
			System.out.println(d);
		}
		//验证字符串是否为时间,如果是转换为Date类型
		String str4 = "2019-06-22";
		String regex4 = "\\d{4}-\\d{2}-\\d{2}";
		String str5 = "2026-06-26 10:10:16";
		String regex5 = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}";
		if (str4.matches(regex4)) {
			System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str4));
		}
		if (str5.matches(regex5)) {
			System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(str5));
		}
		
		//判断是否为电话号码
		//5687445 \\d{7,8}
		//0105687445  ((\\d{3}))?\\d{7,8}
		//(010)-5687445  ((\\((\\d{3})\\)-)|(\\d{3}))?\\d{7,8}
		String num1="5687445"; 
		String num2="0105687445";
		String num3="(010)-5687445";
		String regex6="((\\((\\d{3})\\)-)|(\\d{3}))?\\d{7,8}";
		System.out.println(num1.matches(regex6));
		System.out.println(num2.matches(regex6));
		System.out.println(num3.matches(regex6));
		
		//验证邮箱地址
		String emil="z_zhuo@outlook.com";
		String regex7="[a-zA-Z][a-zA-Z_\\.0-9]{5,9}@[a-zA-Z_\\.0-9]{1,9}\\.(cn|com|net)";
		System.out.println(emil.matches(regex7));
	}
}

**

三、Pattern类与Matcher类

**

public class TestPattern {
	public static void main(String[] args) {
		String str="a|b|c";
		String regex="\\|";
		Pattern pat=Pattern.compile(regex);
		String [] result=pat.split(str);
		for(String s:result){
			System.out.println(s);
		}
	}
}
public class TestMatcher {
	public static void main(String[] args) {
		String str="INSERT INTO member(mid,name,age) VALUES "
				+ "(#{member.mid},#{member.name},#{member.age})";
		String regex="#\\{[a-zA-Z_0-9\\.]+\\}";   //分组的正则表达式
		Pattern pat=Pattern.compile(regex);
		Matcher mat=pat.matcher(str);
		while(mat.find()){    //依次进行比较,如果符合则取出内容
			 System.out.println(mat.group(0));
		}
	}
}

运行截图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值