java基础——正则表达式

本文介绍了正则表达式的概念及基本用法,包括特殊字符、字符类等规则,并通过实例演示了匹配、切割、替换及获取等常用操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式

一、概述

正则表达式是符合一定规则的字符串表达式。有特殊的应用场景。

虽然正则表达式是简化了,但是阅读性变差。

如进行QQ号的校验,要求长度为5-15位,只能是数字,0不能开头。普通的方式为:

private static void checkQQ(String qq) {
		int len = qq.length();
		//判断位数是否符合要求
		if(len >= 5 && len <= 15){
			//不能以0开头
			if(!qq.startsWith("0")){
				try {
					long l = Long.parseLong(qq);
					System.out.println(l+"正确");
				} catch (NumberFormatException e) {
					// TODO Auto-generated catch block
					System.out.println(qq+"含有非法字符");
				}
			}else{
				System.out.println(qq+"不能以0开头");
			}
				
		}else{
			System.out.println(qq+"长度错误");
		}
		
	}

而是用正则表达式后如下:

		String qq = "12345685";
		
		String regex = "[1-9][0-9]{4-14}";//第一位为1-9的数字,接下来0-9出现4到14次
		boolean b = qq.matches(regex);
		System.out.println(qq+":"+b);


二、正则的用法

我们先看一看正则表达式的一些规则:

             A:特殊字符

                    \\:反斜线

                    \r:回车

                    \n:换行

             B:字符类

                    [abc]a,b或者c的任意一个。

                    [^abc]:除了a,b,c以外的字符。

                    [a-zA-Z]:包括了26个英文字母。

                    [0-9]:包括了0-9这个10个数字字符。

             C:预定义字符类

                    .     任意字符

                    \d   数字[0-9]

                    \D   非数字[^0-9]

                    \w   单词字符:[a-zA-Z_0-9]

                    \W  非单词字符:[^\w]

             D:边界匹配器

                    ^    行的开头

                    $    行的结尾

                    \b   单词边界

             E:Greedy数量词

                    x?   0次或1

                    x*   0次或多次

                    x+  1次或多次

                    x{n}恰好n

                    x{n,}至少n

                    x{m,n}至少m次,但不能超过n

按照这些规则,能够读懂别人的正则表达式即可。

简单的常见最好会写。

知道一些规则后,就是常见操作。正则表达式的常见操作有四类:

1.匹配:其实就是使用String类中的matches方法。

2.切割:其实就是使用String类中的split方法。

3.替换:其实就是使用String类中的replaceAll方法。

4.获取:将字符串中的符合规则的子串取出。


1.匹配

//匹配手机号
	//假设手机号已有 13xxxxxxxxx 15xxxxxxxxx 18xxxxxxxxx
	public static void method(){
		String tel = "13055526556";
		//第一位是1,第二位是3,5,8之一,后面的9位是0-9之间的任意数字
		String regex = "1[358]\\d{9}";
		System.out.println(tel.matches(regex));
	}

只有当号码满足上述要求才能返回true否则返回false。


2.切割

//切割
	public static void split(String str , String regex){
		String[] arr = str.split(regex);
		for(String s:arr){
			System.out.println(s);//遍历后打印
		}
	}

主函数中:

String str = "sjdjjnlvvnsklnaaaaixmmmmmmxi";
		//按照叠词完成切割。为了可以让规则的结果被重用
		//可以将规则封装成一个组。用()完成。组的出现都有编号。
		//从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。
		String regex = "(.)\\1+";
		split(str ,regex);

//按照点进行切割
		split("sdhjk.sdbj.shc","\\.");

//按照\进行切割
	 	split("C:\\hah\\sdhj\\sdj",<a>\\\\</a>);


3.替换

//替换
	public static void replace(String str, String regex, String newStr){
		str = str.replaceAll(regex,newStr);
		System.out.println(str);
	}

主函数中:

//将字符串中至少出现5次的数字替换成*
		String str = "sbjnav15227866zbxciv561ijn";
		replace(str,"\\d{5,}","*");

//将叠词替换成一个字符-->dnionsioicjvsdsa
		String str = "dnionsioiicjvvvvsdssaaaa";
		replace(str,"(.)\\1+","$1");

其中$表示:如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。


4.获取

public static void get(){
		String str = "haods asdav sdj asdj sdo dhja ocmed snkd";
		//取出所有由四个字母组成的单词
		String regex = "\\b[a-z]{4}\\b";
		
		//将规则封装成对象
		Pattern p = Pattern.compile(regex);

		//创建匹配给定输入与此模式的匹配器。
		Matcher m = p.matcher(str);

		while (m.find())
		{
			System.out.println(m.group());
		}
	}

操作步骤:

        1)将正则表达式封装成对象。

        2)让正则对象和要操作的字符串相关联。

        3)关联后,获取正则匹配引擎。

        4)通过引擎对符合规则的子串进行操作,比如取出。


三、思路方式


        1,如果只想知道该字符是否对是错,使用匹配。

        2,想要将已有的字符串变成另一个字符串,替换。

        3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。

        4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值