Java基础(学习笔记)之正则表达式

正则表达式
1)什么是正则:
是用于描述一组字符串特征的模式,用来匹配特定的字符串。 它的应用
非常广泛,特别是在字符串处理方面

2)正则的应用:
-》验证字符串:验证邮箱格式、验证密码、验证身份证号…
-》查找字符串:查找用户设置的密码中是否包含特殊符号
-》替换字符串:清洗文本数据
-》 提取字符串:一段文本中提取身份证、手机号、邮箱等

3)Java中正则相关的常用类
-》Pattern类
-》Matcher类
-》PatternSyntaxException

4)正则的使用

		-》Pattern.matches(pattern,content) 	
				匹配整个content字符串是否符合pattern规则
				
		-》java.util.regex.PatternSyntaxException 正则表达式语法错误
		
		-》编译正则规则对象
				String pattern = "\\d+";
				Pattern p = Pattern.compile(pattern)
				
		-》利用正则对象生成Matcher
			String content = "";
			Matcher m = p.matcher(content)
	
		-》m.find()
			从字符串首部开始匹配满足规则的子字符串,匹配成功后,
			将下一次开始匹配的位置向后移动

5)Mathcer对象常用方法对比:

		-》find()
			部分匹配,从当前位置开始匹配,找到一个匹配的子串,将移动下次匹配的位置
			
		-》matches()
			整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。
			但如果前部分匹配成功,将移动下次匹配的位置
			
		-》lookingAt()
			部分匹配,总是从第一个字符进行匹配,匹配成功了不再继续匹配,
			匹配 失败了,也不继续匹配
			
		-》replaceFirst()
			public String replaceFirst(String replaceStr)
			replaceStr  用来替换匹配到的子字符串
			return 	    替换掉第一匹配结果的新字符串
			替换匹配到的第一子字符串
			
		-》replaceAll()
			替换匹配到的所有子字符串

这是正则表达式使用的最基础的方法,许多用到正则表达式的方法网上都有,一搜俱全,比如账号密码的设定、身份证获取信息等等
Java基础(学习笔记)之正则表达式_第1张图片
Java基础(学习笔记)之正则表达式_第2张图片
Java基础(学习笔记)之正则表达式_第3张图片
Java基础(学习笔记)之正则表达式_第4张图片
一个小例子:

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

public class Test {
	/**
	 * 正则表达式 是对字符串的操作 
	 * 1.匹配 就是使用字符串的mathes(String reg )方法
	 * 
	 * 2.切割 使用的是String类中的split(String reg) 这个方法
	 * 
	 * 3.替换 使用的也是String类中的replaceAll()方法
	 * 
	 * 4.获取 String没有提供直接的方法 获取 内容 aaaaaaab b
	 *  Pattern p =Pattern.compile("a*b");
	 *  Mather m=p.matcher("aaab"); 
	 *  boolean b =m.matches();
	 */

	public static void main(String[] args) {
		// checkPhone();
		// splitDemo();
//		replaceAll();
		getString();
	}

	// 获取
	public static void getString() {
		//筛选出下列字符串中 出现三个字符的内容
		String str="da jia zhu yi laa  ma shang xia ke laa  shui jiao de  chi fan la";
		String  reg ="\\b[a-z]{3}\\b";
		Pattern p =Pattern.compile(reg);
		Matcher m =p.matcher(str);
		
		//查询数据即可
		while(m.find()) {
			System.out.println(m.start()+"----"+m.group()+"-----"+m.end());
		}
		
	}

	// 替换
	public static void replaceAll() {
		// 要求对下方字符串执行如下操作 出现两次以上的字符 替换为1个
		String str = "abcddqw#####hggslllaejig";
		// str=str.replaceAll("(.)\\1+", "A");
		// $1 取前方第一组的数据
		str = str.replaceAll("(.)\\1+", "$1");

		System.out.println(str);

		// 打码
		String tel = "18845612307"; // 188****2307
		tel = tel.replaceAll("(\\d{3})(\\d{4})(\\d{4})", "$1****$3");
		System.out.println(tel);

	}

	// 切割
	public static void splitDemo() {
		String str = "34  54    12  67  89  1";
		String[] strSplit = str.split(" +");

		// 要求是对于下方字符串出现两次以上相同的字符作为切割位置
		String str2 = "abcddqw#####hggslllaejig";
		// .代表任意 字符 (.) 代表一个任意字符 而且是一个组 \\1 代表取前方的一组数据 +代表\\1可以出现至少一次 或多次
		// 也就是整个表达式是两次以上的叠词
		String reg = "(.)\\1+";
		String[] arr = str2.split(reg);
		for (String ss : arr) {
			System.out.println(ss);
		}

	}

	// 匹配
	public static void checkPhone() {
		String tel = "18200045671";
		// 校验手机号的合法性
		String reg = "1[34578]\\d{9}";
		boolean b = tel.matches(reg);
		System.out.println(b);

	}

}

你可能感兴趣的:(Java,Java,正则表达式)