案例:正则表达式

正则表达式:符合某种规则的字符串

      作用:我们可以使用它校验一个其他的字符串,还可以使用它替换符合规则的字符串,还可以使用它切割符合规则的字符串
      需求:校验QQ号,全是数字,0不能开头,长度为5-15位
      QQ号:“123456”
      可以使用正则表达式校验
            正则:"[1-9][0-9]{4,14}"
      还可以校验,用户名,密码,邮箱,手机号…
      要求:能看懂别人写的正则就可以了
需要了解的正则:
      表示范围的:[]
            [abc]:代表的是字符a、b 或 c中的,任意一个 “a” “b” “c” true “w” false
            [a-zA-Z]:代表的是a 到 z 或 A 到 Z,两头的字母包括在内,任意一个
            [0-9]:代表的是 0到9数字,两头的数字包括在内,任意一个
            [a-zA-Z_0-9]:代表的字母或者数字或者下划线,任意一个
            范围可以自己定义:[ab12]
      表示数量:{}
            X{n} 代表的是X出现恰好 n 次 a{3} “aaa”;true “aaaa”:false “bac”:false
            X{n,}代表的是X出现至少 n 次 x出现的次数>=n个 a{3,} “aa”;false “aaaa”:true
            X{n,m}代表的是X出现至少 n 次,但是不超过 m 次 n<=x<=m
            X? 代表的是X出现一次或一次也没有 “abc”? “abc”/"":true “abcabc”:false
            X+ 代表的是X出现一次或多次 “a”+ “a…a”/“a”:true “”/“b”:false
            X*(X?+X+)代表的是X出现零次或多次 1* “1”/“1…1”/"":true “aa”:false

String类中和正则表达式有关的方法
public boolean matches(String regex)
      判断字符串是否匹配给定的规则
public String[] split(String regex)
      根据给定正则表达式的匹配规则,拆分此字符串
String replaceAll(String regex, String replacement)
      使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

一些正则表达式的案例:

public class Demo01Regex {
	public static void main(String[] args) {
		replaceAll();
	}
	
	/*
	 * 可以把符合正则表达式的字符串,替换为一个新的字符串
	 * 可以过滤关键字
	 */
	private static void replaceAll() {
		String s = "123DFDSFewrew中1国##11#2#";
		//需求:把字符串中每一个数字,替换为一个@_@
		String ss = s.replaceAll("[0-9]", "@_@");
		System.out.println(s);
		System.out.println(ss);
		//需求:把字符串中的连续数字,替换为一个@_@
		ss = s.replaceAll("[0-9]+", "@_@");
		System.out.println(s);
		System.out.println(ss);
	}

	/*
	 * 192.168.1.100
	 * .在正则表达式中有特殊含义:代表任意的字符
	 * 可以使用转义字符:\ 正则表达式中两个\\代表一个\
	 * 我们可以使用转义字符,把有特殊含义的.转换为一个普通的.-->\\.
	 */
	private static void split03() {
		char c = '\'';//使用转义字符把有特殊含义的',变成普通的'使用,\'是一个字符
		System.out.println(c);
		System.out.println("姓名\t年龄");//把使用转义字符,把普通的字符t,变成一个制表符tal
		String[] arr = "192.168.1.100".split("\\.");
		System.out.println("数组的长度:"+arr.length);
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

	/*
	 * 11 22 33 44
	 * 11		22		33		44-->" +":使用一个或者多个出现的空格进行切割
	 */
	private static void split02() {
		String[] arr = "11 22 33 44".split(" ");
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		System.out.println("----------");
		String[] arr2 = "11        22           33   44".split(" +");
		System.out.println("数组的长度:"+arr2.length);
		for (int i = 0; i < arr2.length; i++) {
			System.out.println(arr2[i]);
		}
	}

	/*
	 * 11-22-33-44
	 */
	private static void split01() {
		String[] arr = "11-22-33-44".split("-");
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

	/*
	 * 举例:校验手机号码
	 * 1:要求为11位数字
	 * 2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
	 * 
	 * 正则:"1[34578][0-9]{9}"
	 */
	private static void checkPhoneNumber() {
		String phoneNumber = "13800138000";//true
		phoneNumber = "138001380000";//12位 false
		phoneNumber = "1380013800O";//12位 false
		phoneNumber = "1380013800";//10位 false
		phoneNumber = "23800138000";//10位 false
		String regex = "1[34578][0-9]{9}";
		boolean b = phoneNumber.matches(regex);
		System.out.println(b);
	}

	/*
	 * 举例:校验qq号码.
	 * 	1:要求必须是5-15位数字
	 * 	2:0不能开头
	 * 
	 * 正则:"[1-9][0-9]{4,14}"
	 */
	private static void checkQQ() {
		String qq = "123456";//true
		qq = "123a456";//false
		qq = "1234";//false
		qq = "0123456";//false
		qq = "12345678910111213";//false
		String regex = "[1-9][0-9]{4,14}";
		boolean b = qq.matches(regex);
		System.out.println(b);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_45083975/article/details/91976940
今日推荐