java 之 正则表达式


正则表达式:
	A:字符
		x  代表字符x。如 a 标识'a'
		\\ 反斜杠字符
		\n 换行符('\u000A')
		\r 回车符('\u000D')
	B:字符类
		[abc] 代表有a 或 b 或 c  有且只有一个字符
		[^abc] a b c都不是
		[a-zA-Z] 所有字母中的一个(有一个闭区间范围内的值)
		[0-9] 0到9之间的一个字符
	C:预定义子父类
		. 	任意字符
		\d  数字字符
		\D	非数字字符
		\s	空白字符[\t\n\r\x0B]
		\S	非空白字符[^\s]
		\w 	单词字符[a-zA-Z_0-9](下划线也属于单词字符)
		\W	非单词字符
	D:边界匹配器
		^	开头
		$	行为
		\b	单词边界 (不是单词字符的地方)
		
	E:数量词
		X?	至多一次
		X*	零次或者多次
		X+	至少一次
		X{n}	刚好n次
		X{n,}	至少n次
		X{n,m}	n到m次,闭区间
 
 正则表达式常见例子
 		判断: 	boolean matches(String regex)
 							regex 为正则表达式字符串
 		分割:	String[] split(String regex)
 		替换:	String replaceAll(String regex,String replacement)
——————————————————————————————————————————————————————————————————————————————————————————————————————
	package demo;

	import java.util.Scanner;

	public class demo1 {
		public static void main(String[] args) {
	//		System.out.println(judgeCellnumber());
			System.out.println(emailCheck());
		}
		//实例:判断输入字符是否是一个手机号(11位数字,1开头)
		public static boolean judgeCellnumber() {
			boolean flag = false;
			System.out.println("请输入手机号:");
			String cellNum = new Scanner(System.in).next();//获取输入的字符串
			String regex = "[1][3578][0-9]{9}";//手机号的正则表达式
	//		String regex = "[1]\\d{10}";
			flag = cellNum.matches(regex);//匹配判断
			return flag;
		}
		
		public static boolean emailCheck(){
			boolean flag = false;
			System.out.println("请输入邮箱:");
			String cellNum = new Scanner(System.in).next();//获取输入的字符串
			String regex = "(\\w)+@\\w{2,6}(\\.\\w{2,3})+";//正则表达式
	//		String regex = "[1]\\d{10}";
			flag = cellNum.matches(regex);//匹配判断
			return flag;
		}
		//判断邮箱功能
	}
——————————————————————————————————————————————————————————————————————————————————————————————————
	//获取字符串中只有3个字母的单词
	package demo;

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

	public class Test2 {
		public static void main(String[] args) {
			String str = "wo shi huang yha ning,ni hao la,haha hah";
			//正则表达式原始
			String regex = "\\b\\w{3}\\b";
			//将正则表达式编译到模式中
			Pattern p =  Pattern.compile(regex);
			Matcher m = p.matcher(str);//模式的匹配过滤器
	//		boolean b = m.matches();
	//		System.out.println(b);
			System.out.println(p.pattern());//返回此编译模式的正则表达式

	//		System.out.println("find匹配的字符:"+m.find());
	//		System.out.println(m.group());
	//		
	//		System.out.println("find匹配的字符:"+m.find());
	//		System.out.println(m.group());
			boolean b = false;
			while(b=m.find()){
				System.out.println("find匹配的结果:"+b);
				System.out.println(m.start());//返回前一个find的匹配的初始索引
				System.out.println(m.end());//返回最后匹配字符之后的偏移量
				System.out.println("偏移量截到的字符串:"+str.subSequence(m.start(), m.end()));
				System.out.println("group获取的字符串:"+m.group());
				
			}
		}
	}
	输出结果
	\b\w{3}\b
	find匹配的结果:true
	3
	6
	偏移量截到的字符串:shi
	group获取的字符串:shi
	find匹配的结果:true
	13
	16
	偏移量截到的字符串:yha
	group获取的字符串:yha
	find匹配的结果:true
	25
	28
	偏移量截到的字符串:hao
	group获取的字符串:hao
	find匹配的结果:true
	37
	40
	偏移量截到的字符串:hah
	group获取的字符串:hah
————————————————————————————————————————————————————————————————————————————————————————————————————————————
	//我我我......我爱爱爱...爱学..学.....编编程.....
	//转为  我爱学编程
	public class Test11 {
			public static void main(String[] args) {
					String str = "我我我......我爱爱爱...爱学..学.....编编程.....";
					//将.替换成空字符
					str = str.replaceAll("\\.", "");
					System.out.println(str);
					//去除叠词
					str = str.replaceAll("(.)\\1+","$1");
					System.out.println(str);
					
					str = "abcabcaaabcaaaabbccabc";
					str = str.replaceAll("(abc(aa))\\1", "*");
					System.out.println(str);
			}
	}

	输出结果:
		我我我我爱爱爱爱学学编编程
		我爱学编程
		abc*aabbccabc


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值