正则表达式总结

正则表达式用于操作字符串的规则,这些规则由一些符号所组成。使用正则表达式可以进行更复杂的操作,而且这种复杂的操作要比方法短的多。

功能:
1,匹配。使用的是String类中的matches方法。

2,切割。使用的String类split方法。

3,替换。

4,查找。
    1,将正则规则通过Pattern类中的static方法complie,封装成Pattern对象,
    2,通过Pattern类中matcher方法与字符串相关联,获取匹配器对象。
    3,通过匹配器的方法来操作字符串。如:find是否找到,group取去匹配后的字符串。

其实String类中有关正则表达式的方法,底层都是先将传入的正则规则封装成Pattern对象。
然后通过Pattern对象获取Matcher对象,在调用Matcher的方法完成的。

示例:

	/*
	获取文件中的email地址。
	思路:
	1,既然要读取是一个文件,需要使用字符流。FileReader。BufferedReader。
	2,读到一行数据,就和规则相关联,取出这行字符串中所有的email地址。
	3,将email地址进行存储。
	*/
	public static void getMail()throws IOException
	{
		BufferedReader bufr = new BufferedReader(new FileReader("mail.txt"));
		
		String line = null;

		String mailreg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";

		Pattern p = Pattern.compile(mailreg);

		while((line=bufr.readLine())!=null)
		{
			Matcher m = p.matcher(line);
			while(m.find())
			{
				System.out.println(m.group());
			}
		}
	}

	/*
	 * 校验邮件
	 */
	public static void checkMail()
	{
		String  mail = "abc@sina.com.cn";

		String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
		
		//reg = "\\w+@\\w+(\\.\\w+)+";//宽松式校验。

		boolean b = mail.matches(reg);

		System.out.println("mail:"+b);
	}

	/*
	192.168.1.253 10.10.10.10 127.0.105.1 2.2.2.2 30.30.30.30
	将这些ip地址按照ip地址段的顺序排序。
	*/
	public static void ipSort()
	{
		String ip = "192.168.1.253 10.10.10.10 127.0.105.1 2.2.2.2 30.30.30.30";

		//最方便方式,就是按照字符串的字典顺序比较。但是必须要保证每一个地址的位数是相同的。
		//所以在不足三位段上补零,首先按照最大补零数进行填充。

		ip = ip.replaceAll("(\\d+)","00$1");
		System.out.println(ip);//补完。

		//对补完0的ip,进行每段最后三位的保留
		ip = ip.replaceAll("0*(\\d{3})","$1");
		System.out.println(ip);//192.168.001.253 010.010.010.010 127.000.105.001 002.002.002.002 030.030.030.030

		//通过空格进行切割。
		String[] arr = ip.split(" ");
		TreeSet<String> ts = new TreeSet<String>();
		
		for(String s: arr)
		{
			ts.add(s);
		}

		for(String s : ts)
		{
			System.out.println(s.replaceAll("0*([0-9]+)","$1"));
		}
	}

	/*
	 * 替换:使用指定字符串替换符合规则的字符串。
	 *       将叠词多个替换成一个
	 */
	public static void replaceReg()
	{
		String str = "dfqqqghjzzkltpppyu";

		String s = str.replaceAll("(.)\\1+","$1");

		System.out.println(s);
	}

	/*
	 * 切割:按照指定规则字符串。
	 */
	public static void splitStr()
	{
		String str = "we.rw.er.ty";//
		String reg = "\\.";//对于 . 在正则中是一个特殊字符。如果只当作普通符号来用,必须要转义。
		
		str = "dfqqqghjzzkltpppyu";
		reg = "(.)\\1+";// 用叠词作为分隔符将字符串分开
		
		String[] arr = str.split(reg);
		for(String s : arr)
		{
			System.out.println(s);
		}
	}

	/*
	查找:获取字符串中指定的三个单词。
	思路:
	想要获取指定单词,使用匹配是不可以的,因为符合要求的结果不是boolean类,而是很多单个字符串。
	这时就要使用正则表达式对象。Pattern。
	*/
	public static void getWord()
	{
		String str ="da jia ming tian fang jia le ,shuang!";

		String reg = "\\b[a-z]{4}\\b";
		
		//1,将正则表达式封装成Pattern。使用Pattern对象中 compile方法。
		Pattern p = Pattern.compile(reg);

		//2,将正则对象和字符串进行关联。使用的matcher方法。该方法会返回一个匹配器对象Matcher。
		Matcher  m = p.matcher(str);
		
		//3,使用匹配器对象的find方法去找是否有符合规则的内容。通过group获取查找到的字符串。
		while(m.find())
		{
			System.out.println(m.group());
		}
	}

	/*
	 * 校验电话。
	 */
	public static void checkTel()
	{
		String tel = "15800190000";
		String telreg = "1[35]\\d{9}";
		System.out.println(tel.matches(telreg));
	}


	/*
	 * 演示数量词。
	 */
	public static void checkStr()
	{
		String str = "acccb";

		String strreg1 = "ac{3}b";//true,c只能出现3次
		String strreg2 = "ac*b";//true, * c出现0次或者多次都可以。
		String strreg3 = "ac?b";//false, ? 表示 c出现1次或者0次。
		String strreg4 = "ac+b";//true ,+ 表示 c出现1次或者多次。
		System.out.println("str="+str.matches(strreg1));
		System.out.println("str="+str.matches(strreg2));
		System.out.println("str="+str.matches(strreg3));
		System.out.println("str="+str.matches(strreg4));
	}

	/*
	 *普通方法判断一个QQ号,要求:5~15,不可以0开头,必须都是数字。
	 */
	public static void checkQQ(String qq)
	{
		int len = qq.length();
		if(len>=5 && len<=15)
		{
			if(!qq.startsWith("0"))
			{
				try
				{
					long num = Long.parseLong(qq);
					System.out.println(num);
				}
				catch (NumberFormatException e)
				{
					System.out.println("fifa qq");
				}
			}
			else
				System.out.println("no 0 start");
		}
		else
			System.out.println("qq len nono");
	}
	
	/*
	 * 正则表达式判断一个QQ号
	 */
	public static void checkQQByReg()
	{
		String qq = "552678";
		String qqreg = "[1-9]\\d{4,14}";
		boolean b = qq.matches(qqreg);
		System.out.println("qq:"+b);

//		Pattern p = Pattern.compile(qqreg);
//		Matcher m = p.matcher(qq);
//		boolean b2 = m.macthes();
	}


  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傅荣康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值