黑马程序员--正则表达式笔记

---------------------- android培训java培训、期待与您交流! ----------------------

正则表达式基础知识

定义:符合一定规则的表达式

作用:由于专门操作字符串。

特点:用于一些特定的符号来表示一次代码,这样做简化书写。

好处:可以简化对字符串的复杂操作。

弊端:符号定义越多,正则越长,阅读性越差。

所以说学习正则表达式,就是学习一些特殊符号的使用。


具体操作功能

1.匹配:String  matches方法
2.切割:String split方法
3.替换:String replaseAll方法
在替换过程中在组的外面可以$来用前面的组,比如replaceAllDemo(str,"(.)\\1+","$1"); 后面的$1就是引用的前面的组中的内容
解释   replaceAllDemo(String str,String reg,String newStr)
         {//去字符串中连续重复的字符替换为一个该字符。
             str= str.replaceAll(reg,newStr);
           }
注意
"."->"\\."
叠词-->"(.)\\1+"   用括号括()起来则将封装成一个组。组的出现都是有编号的,编号从1开始
想要使用组可以通过\n (n就是组的编号)的形式来获取。
怎么区分几个组?从左向右从1开始数左括号,是几则这个组的编号就是几.
在表达式 ((A)(B(C))) 中,存在四个这样的组: 

1     ((A)(B(C))) 
2     \A 
3     (B(C)) 
4     (C) 

组零始终代表整个表达式。 


4.获取:将字符串中符合规则的子串取出
操做步骤
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串相关联。
3关联后,获取正则匹配引擎。
4.通过引擎对符合规则的子串进行操作,比如取出。
例子
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegexDemo {


	/**获取:将字符串中符合规则的子串取出
	 * 操做步骤
	 *	1.将正则表达式封装成对象
	 *	2.让正则对象和要操作的字符串相关联。
	 *	3关联后,获取正则匹配引擎(匹配器)。
	 *	4.通过引擎对符合规则的子串进行操作,比如取出。
	 * @param args
	 */
	public static void main(String[] args) {
		
		getDemo();
	}
	public static void getDemo(){
		String str= "ming tian jiu yao fang jia le. ";
		String reg= "\\b[a-z]{3}";// \\b是单词边界匹配
		//将规则封装为对象;
		Pattern p = Pattern.compile(reg);
		//让正则对象和要操作的字符串相关联。获取匹配器。
		Matcher m = p.matcher(str);
		
		System.out.println(m.matches());
		//其实String类matchers用的就是Pattern和Matcher对象来完成的
		//只不过被String的方法封装后,用起来较简单,但是功能却单一。
		
		//Boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找。
		//System.out.println(b);
		//System.out.println(m.group());//用于获取匹配后的结果。
		
		while (m.find())
		{
			System.out.println(m.group());
		}
	}


}



这四种功能如何选择呢?

思路方式
1.如果只想知道该字符是否是对是错。使用匹配
2.想要将已有的字符串变成另一个字符串,替换
3.想要按照自定的方式将字符串变成多个字符串,切割。获取规则以外的子串。
4.想要拿到符合需求的字符串子串,获取。获取符合规则的子串


练习


将ip地址进行地址段顺序排序
 192.68.1.254  102.49.23.13  10.10.10.10  2.2.2.2  8.109.90.30
思路
还按照字符串自然顺序,只要将它们的每一段都是三位即可。
1.按照每一段粗腰的最多的0补齐,那么每一段就会至少保证有三位。
2.将每一位只保留三位。这样,所有的ip地址都是每段三位。


import java.util.TreeSet;


public class IPSortDemo {


	/**将ip地址进行地址段顺序排序
 192.68.1.254  102.49.23.13  10.10.10.10  2.2.2.2  8.109.90.30
思路
还按照字符串自然顺序,只要将它们的每一段都是三位即可。
1.按照每一段粗腰的最多的0补齐,那么每一段就会至少保证有三位。
2.将每一位只保留三位。这样,所有的ip地址都是每段三位。


	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ipsort();
	}
	public static void ipsort()
	{
		String ip ="192.68.1.254  102.49.23.13  10.10.10.10  2.2.2.2  8.109.90.30";
		String rex ="\\d+";
		ip= ip.replaceAll("(\\d+)", "00$1");
		System.out.println("ip::"+ip);
		//ip::00192.0068.001.00254  00102.0049.0023.0013  0010.0010.0010.0010  002.002.002.002  008.00109.0090.0030
		
		ip=ip.replaceAll("0*(\\d{3})", "$1");
		System.out.println("ip1::"+ip);
		
		String [] arr = ip.split(" +");
		TreeSet<String> ts =new TreeSet<String>();
		for(String s: arr)
		{
			//去零
			s=s.replaceAll("0*(\\d+)", "$1");
			System.out.println(s);
		}
		
	}


}


-----------------------------------------------------
从文件获取邮件地址代码


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class getMailTest {


	/**网页爬虫
	 * 获取指定文档的邮箱地址
	 * 使用正则表达式的获取功能 。Pattern Matcher
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		getMail();


	}
	public static void getMail() throws Exception
	{
		BufferedReader bufr = new BufferedReader(new FileReader("c:\\abc.txt"));
		String line = null;
		String mailReg ="\\w+@\\w+(\\.\\w+)+";
		Pattern p =Pattern.compile(mailReg);
		while((line=bufr.readLine())!=null)
		{
			Matcher m = p.matcher(line);
			while(m.find())
			System.out.println(m.group());
		}
	}


}


---------------------- android培训java培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值