正则表达式

正则表达式:

1、正则表达式就是字符串中字符出现的规则,就是字符串的规则定义,就是字符串出现的次序规律。

2、作用:经常需要对字符串数据进行一些复杂的匹配、查找、替换等操作。通过正则表达式,可以方便的实现字符串的复杂操作。

   1)、文本内容检索:在文件中查询需要的内容,如检查一段文字中是否包含敏感词

   2)、文本规则检查:检查文件是否符合规范,如检查一个String是否符合Email的规则

   3)、文本处理:拆分、替换等等

3、java php javascript等很多语言都支持正则表达式

4、开发工具、操作系统(例如ubuntu中的命令)也支持正则表达式

5、Java的正规规则详细手册

   java.util.regex.Pattern

字符集:表示一个字符的选择范围

例如:正则表达式:“[a-z]”表示a到z的任意一个字符,[ ]是字符集

数词:用来约定左侧字符出现的次数

如:0{6}:表示6个0

matches(正则表达式)方法:

将一个字符串与正则表达式进行匹配,如果成功返回true,否则返回false。

        public void testRegex() {
		String r1="[a-z]*";//a-z出现0个或者多个
		String r2="\\w+\\.jar";//前面是字符,后面是.jar文件,“\”必须转义为“\\”
		//matches是String提供的API方法,可以检查当前字符串是否符合正则规则
		//如检查“abcde”是否符合r1的规则
		System.out.println("abcde".matches(r1));
		System.out.println("junit.jar".matches(r2));
		System.out.println("*.jar".matches(r2));//false,*不属于\w的范围
	}
	
	public void testRegex2() {
		String r="(\\+86|0086)?\\s?\\d{11}";//+86|0086 ?表示可有可无,\s表示空格 ,\d表示数字,{11}表示\d这个数字有11个
		String phone1="15619273822";//true
		String phone2="+86 13857402876";//true
		String phone3="0086 19837465873";//true
		String phone4="8619284758376";//false
		System.out.println(phone1.matches(r));
		System.out.println(phone2.matches(r));
		System.out.println(phone3.matches(r));
		System.out.println(phone4.matches(r));
	}

split

String的split方法可以将字符串按照特定的分隔符拆分成字符串数组

split之后是一个数组

String[]split(String regex);以regex所表示的字符串为分隔符,将字符串拆分成字符串数组

        public void testSplit() {
		//按空格拆分
		String str="java cpp php c# object-c";
		String[] strArr=str.split("\\s");//按空格拆分
		System.out.println(Arrays.toString(strArr));//把字符串转换为数组[java, cpp, php, c#, object-c]

		//按+、-、=符号拆分
		String line="100+200-150=150";
		strArr=line.split("[\\+\\-=]");//如果不加\的话+表示多个,如果不加\的话-表示连接符,例如a-z表示a到z,而=不需要加
		System.out.println(Arrays.toString(strArr));//[100, 200, 150, 150]
	
	}

	public void testSplit2() {
		String cmd="get day01.zip day02.zip";
		//1、检查是否是合理的get命令
		//2、如果是get命令,就将文件名列表读取到数组中
		//策略:
		//1)利用正则表达式检查命令格式
		//2)利用正则表达式切分
		String getRule="^get(\\s+.+)";//^表示从头开始,get命令的规则以get开头,后面有空格,空格以后是文件名,
		                              //文件名是任意的字符用.表示,+表示1个到任意多个
		String[] files=null;
		if(cmd.matches(getRule)) {
			System.out.println("这是一个get命令");
			String[] data=cmd.split("\\s+");//以空格拆分,data用于盛放文件名列表
			files=new String[data.length-1];//除去get
			System.arraycopy(data, 1, files,  0, data.length-1);				
		}
		System.out.println(Arrays.toString(files));
	}

正则表达式:

1、字符集:[^abc]:表示除了abc之外的任意字符

2、预定义字符集:

. 表示任意一个字符

\d 表示任意一个数字字符,相当于[0-9]

\w 表示单词字符,相当于[a-z0-9A-Z_]

\s 表示空白字符,相当于[\t\n\x\f\r]

\D 表示得数字字符

\W 表示非单词字符

\S 表示非空白字符

3、数量词

X? 表示0个或1个X

X* 表示0个或任意多个X

X+ 表示1个到任意多个X

X{n} 表示n个X

X{n,} 表示n个到任意多个X

X{n,m} 表示n个到m个X

replaceAll方法:

StringreplaceAll(String regex,String replacement):将字符串中匹配正则表达式regex的字符串替换成replacement。如果新字符串和原字符串一样,则也返回新字符串。

public void testReplaceAll() {
		//将str中的所有数字替换为”数字“2字
		String str="abc123bcd45ef6g7890";
		str=str.replaceAll("\\d+", "数字");//\d+表示一个到任意多个都替换成后面的
		System.out.println(str);//输出的是新字符串,原字符串不变,abc数字bcd数字ef数字g数字
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值