java正则表达式的使用

我们都知道,String类封装了很多关于操作字符串的许多方法,且在我们日常的程序编写过程中,经常需要对字符串进行处理。
当我们要对一个字符串的内容进行某些限制或者操作(如判断用户名是否符合命名规则、邮箱格式是否正确),使用正则表达式可以帮我们很轻松的完成对字符串的相关操作。

使用正则表达式可以完成减轻代码的复杂度,很复杂的处理过程有时只需交给正则表达式处理,使得程序更为简练。但与此同时,由于正则表达式功能封装性太强,不易一下子读懂,所以记得要备注清楚正则表达式的说明。

字符串的正则表达式首先会被编译为此Pattern类的实例,我们可以查看API Pattern类进行正则表达式的构造。
学习正则表达式,多查API 多练习即可:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 正则表达式,请参照Pattern等相关API
 * @author 
 *
 */
public class PatternTest {

	public static void main(String[] args) {
		//matches1();
		//matches2();
		//matches3();
		//matches4();
		//matches5();
		matches6();
		
	}

	//应用Pattern类来处理正则表达式
	private static void matches6() {
		String str = "wfs 897f sf sdf 78sdf sdf iopo tyr";
		//找到3个字母的单词   \b为单词边界的匹配,可查阅Pattern 关于边界的说明。
		String regex = "\\b\\w{3}\\b";
		Pattern p = Pattern.compile(regex);
		//获取匹配器
		Matcher m = p.matcher(str);
		//进行一次次匹配,如果匹配,则打印出结果    matches()是对整个字符串的匹配。
		while(m.find()){
			System.out.println(m.group());
			//当前匹配开起始字母索引值
			System.out.println(m.start());
			//当前匹配开结束字母索引值
			System.out.println(m.end());
		}
	}

	//对字符串进行替换
	private static void matches5() {
		String str = "wanggzhing22234lkf2433lkkj";
		//将其中的数字去除
		String regex1 = "\\d+";
		//将其中的叠词dd 222等替换为单个
		String regex2="(.)\\1+";
		
		System.out.println(str.replaceAll(regex1, ""));
		//$用地取上一个正则表达式中的组
		System.out.println(str.replaceAll(regex2, "$1"));
	}

	//对字符串进行分解    组的运用
	private static void matches4() {
		//以点来分解
		//String str = "com.java.pattern";
		//String regex ="\\.";
		
		//对不规则的点来分解
		//String str = "com..java.....pattern.test";
		//String regex ="\\.+";
		
		//分组的使用
		String str = "ja33vafoi....usdfff4::45nnsassd";
		// . 代表任意字符  (.)将其进行分组,  \1表示第一组的内容
		//以下表达式表示同样的内容出现过两次以上
		String regex ="(.)\\1+";
		
		
		
		String[] arr = str.split(regex);
		for(String s:arr) {
			System.out.println(s);
		}
	}

	//Greedy 数量词 ,指定正则表达式出现次数的判断
	private static void matches3() {
		// ?代表0次或1次,+代表1次或多次,*代表0或多次
		//{x} 刚好出现x次, {x,}至少出现x次,{x,y}出现x次以上但不超过y  
		
		String str = "234352";
		//定义规则,数字可以出现一次或者多次。
		//String regex = "\\d?";
		String regex = "\\d{5,15}";
		boolean result = str.matches(regex);
		System.out.println(result);
	}

	//预定义类,顾名思义,预定义类就是将一些常用的正则给简化了。
	private static void matches2() {
		//      . 表示任意符,
		//      \d 表示数字:[0-9] 
		//		\D 非数字: [^0-9] 
		//		\s 空白字符:[ \t\n\x0B\f\r] 
		//		\S 非空白字符:[^\s] 
		//		\w 单词字符:[a-zA-Z_0-9] 
		//		\W 非单词字符:[^\w] 
		
		String str = "3_W";
		String regex = "\\d\\w\\w";
		//String regex = "\\d\\w+";
		boolean result = str.matches(regex);
		System.out.println(result);
	}

	//字符类
	private static void matches1() {
		String str = "aA";
		// String str = "ab";
		
		// 指定正则表达式 [] 代表一个字符,[abc]表示这个字符可以是abc中的任意一个。
		//[A-Z]表示A-Z的任意一个字符。
		String regex = "[abc][A-Z]";
		boolean result = str.matches(regex);
		System.out.println(result);
	}
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值