常用类库------15.13正则表达式

正则表达式

正则表达式最早是从UNIX系统的工具组件中发展而来的,在JDK 1.4以前如果需要使用到正则表达式的相关定义则需要单独引入其它的*.jar文件,而从JDK 1.4之后,正则已经默认被JDK所支持,并且提供有java.util.regex开发包,同时针对于String类也进行了一些修改,使其可以有方法直接支持正则处理
范例:使用正则表达式

public class JavaAPIDemo358 {
       public static void main(String[] args) {
		String str="123";
		if(str.matches("\\d+")) {  //结构匹配   判断是否为多位数字
			int num=Integer.parseInt(str);//将字符串转换为int型数据类型
			System.out.println(num*2);
		}
	}
}

执行结果
2

15.13.1常用正则标记

java.util.regex.Pattern中
1、字符:匹配单个字符

  • a:表示匹配字母a;
  • \:匹配转义字符“\”;
  • \t:匹配转义字符“\t”;
  • \n:匹配转义字符“\n”;

2、一组字符:任意匹配里面的一个单个字符;

  • [abc]:表示可能是字母a,可能是字母b或者是字母c;
  • [^abc]:表示不是字母a、字母b、字母c的任意一个;
  • [a-zA-Z]:表示全部字母中的任意一个;
  • [0-9]:表示全部数字的任意一个;

3、边界匹配:在以后编写JavaScript的时候使用正则中要使用到;

  • ^:表示一组正则的开始;
  • $:表示一组正则的结束;
    4、简写表达式:每一位出现的简写标记也只表示一位;
  • .:表示任意的一位字符;
  • \d:表示任意的一位数字,等价于“[0-9]”;
  • \D:表示任意的一位非数字,等价于“[^0-9]”;
  • \w:表示任意的一位字母、数字、,等价于“[a-zA-Z0-9]”;
  • \W:表示任意的一位非字母、数字、,等价于“[^a-zA-Z0-9]”;
  • \s:表示任意的一位空格,例如:\n、\t等;
  • \S:表示任意的一位非空格;

5、数量表示:之前的所有正则都只是表示一位,如果要想表示多位,则就需要数量表示。

  • 正则表达式?:此正则出现0次或1次;
  • 正则表达式*:此正则出现0次、1次或多次;
  • 正则表达式+:此正则出现1次或多次;
  • 正则表达式{n}:此正则出现正好n次;
  • 正则表达式{n,}:此正则出现n次以上;
  • 正则表达式{n,m}:此正则出现n ~ m次。

6、逻辑表示:与、或、非

  • 正则表达式A正则表达式B:表达式A之后紧跟着表达式B;
  • 正则表达式A|正则表达式B:表示表达式A或者是表达式B,二者任选一个出现;
  • (正则表达式):将多个子表达式合成一个表示,作为一组出现。

15.13.2String类对正则的支持

在这里插入图片描述
范例:实现字符串替换(删除非字母与数字)

public class JavaAPIDemo360A {
       public static void main(String[] args) {
		String str="liliu@#$%";
		String regex="[^a-zA-Z0-9]+";
		System.out.println(str.replaceAll(regex, ""));
	}
}

执行结果

liliu

范例:实现字符串拆分

public class JavaAPIDemo360B {
      public static void main(String[] args) {
		String str="k555h4448h54f555r44k4";
		String regex="\\d+";
		String [] result=str.split(regex);
		for (int i = 0; i < result.length; i++) {
			System.out.print(result[i]+" ");
		}
	}
}

执行结果

k h h f r k 

范例:判断一个数据是否为小数,如果是小数则将其转换double型


public class JavaAPIDemo361A {
      public static void main(String[] args) {
    	  String str = "100.1"; 	// 要判断的数据内容
  		String regex = "\\d+(\\.\\d+)?"; 	// 正则表达式
  		if (str.matches(regex)) {	// 正则匹配成功
  			double num = Double.parseDouble(str) ; // 字符串转double
  			System.out.println(num);	// 直接输出
  		} else {
  			System.out.println("内容不是数字,无法转型。");
  		}

	}
}

执行结果

100.1

范例:判断一个字符串是否由日期所组成,如果是由日期所组成则将其转为Date类型

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class JavaAPIDemo361B {
       public static void main(String[] args) throws ParseException {
		String str="1998-06-14";
		String regex="\\d{4}-\\d{2}-\\d{2}";
		if(str.matches(regex)) {
			System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
			
		}
	}
}

执行结果

Sun Jun 14 00:00:00 CST 1998

范例:判断电话号码格式是否正确
在本程序中电话号码的内容有如下三种类型:

  • 电话号码类型一(7 ~ 8位数字):51283346(判断正则:“\d{7,8}”);
  • 电话号码类型二(在电话号码前追加区号):01051283346(判断正则:“(\d{3,4})?\d{7,8}”);
  • 电话号码类型三(区号单独包裹):(010)-51283346(判断正则:“((\d{3,4})|(\(\d{3,4}\)-))?\d{7,8}”);
public class JavaAPIDemo361C {
       public static void main(String[] args) {
		String str="(010)-51283346";
		String regex="((\\d{3,4})|(\\(\\d{3,4}\\)-))?\\d{7,8}"; // 正则表达式
		System.out.println(str.matches(regex));// 正则匹配

	}
}

执行结果
true
范例:验证Email格式
现在要求一个合格的Email地址的组成规则如下:

  • email的用户名可以由字母、数字、所组成(不应该使用“”开头);
  • email的域名可以由字母、数字、_、-所组成;
  • 域名的后缀必须是:.cn、.com、.net、.com.cn、.gov;
public class JavaAPIDemo362 {
	public static void main(String[] args) throws Exception {
		String str = "[email protected]"; 	// 要判断的数据
		String regex = "[a-zA-Z0-9]\\w+@\\w+\\.(cn|com|com.cn|net|gov)"; 	// 正则表达式
		System.out.println(str.matches(regex));	// 正则匹配
	}

}

执行结果
true

15.13.3 java.util.regex包支持

Pattern类的常用方法(正则模式):
在这里插入图片描述
Matcher类的常用方法(匹配):
在这里插入图片描述
范例:使用Pattern类实现字符串拆分

public class JavaAPIDemo363A {
	public static void main(String[] args) throws Exception {
		String str = "ll()lia$()java&*()#@Python" ;	// 要拆分的字符串
		String regex = "[^a-zA-Z]+" ;	// 正则匹配标记
		Pattern pat = Pattern.compile(regex) ; 	// 编译正则表达式
		String result [] = pat.split(str) ; 	// 字符串拆分
		for (int x = 0 ; x < result.length ; x ++) {	// 循环输出拆分结果
			System.out.print(result[x] + "、");
		}
	}
}



执行结果

ll、lia、java、Python、

范例:使用Matcher类实现正则验证

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

public class JavaAPIDemo363B {
     public static void main(String[] args) {
		String str="101";
		String regex="\\d+";
		Pattern pat=Pattern.compile(regex);
		Matcher mat=pat.matcher(str);
		System.out.println(mat.matches());
	}
}

执行结果
true
范例:使用Matcher类实现字符串替换

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

public class JavaAPIDemo364 {
       public static void main(String[] args) {
		String str="ljmfdvsnui$#$%reh!#$%";
		String regex="[^a-zA-Z0-9]";
		Pattern pat=Pattern.compile(regex);
		Matcher mat=pat.matcher(str);
		System.out.println(mat.replaceAll(""));
	}
} 

执行结果

ljmfdvsnuireh

范例:使用Matcher类实现数据分组操作

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

public class avaAPIDemo364B {
	public static void main(String[] args) throws Exception {
		// 定义一个语法,其中需要获取“#{}”标记中的内容,此时就必须进行分组匹配操作
		String str = "INSERT INTO dept(deptno,dname,loc) VALUES (#{deptno},#{dname},#{loc})";
		String regex = "#\\{\\w+\\}";	// 正则表达式
		Pattern pat = Pattern.compile(regex); 	// 编译正则表达式
		Matcher mat = pat.matcher(str);// 获取Matcher类实例
		while (mat.find()) { 	// 是否有匹配成功的内容
			// 获取每一个匹配的内容,并且将每一个内容中的“#{}”标记替换掉
			String data = mat.group(0).replaceAll("#|\\{|\\}", "") ;
			System.out.print(data + "、"); 
		}
	}

}

执行结果

deptno、dname、loc、
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章