黑马程序员——java基础-正则表达式

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

第一节:正则表达式
一、正则表达式的简述:
1 正则表达式:符合一定规则的表达式。
2 作用:用于专门操作字符串。
3 特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
4 好处:可以简化对字符串的复杂操作。
5 弊端:符号定义越多,正则越长,阅读性越差。
二、常见的功能:
1 功能的概述:
  (1)、正则里面有 1匹配  2切割  3替换   4获取  四种方法进行对字符串操作。
  注:其中123方法在String中都有相对应的方法matches(regex)  split(regex) replaceAll(regex),而获取没有
获取的步骤:1将正则表达式封装成对象;p=Pattern.compile(reg)。2、让正则对象和要操作的字符串想关联;Matcherm=p.matcher(str)。
3、获取正则匹配matcher。4、通过引擎对符合规则的子串进行操作 比如:while(m.find())   m.group();   
2 代码体现

import java.util.regex.*;
class RegexDemo
{
	public static void main(String[] args)
	{
		//1匹配
	getMatches();
	// 2切割
	getSplit();
	// 3替换
	getReplaceAll();
	//4获取 
	getPatter();
	}
	public static void getPatter()
	{
		String ster="xiao jia hou,ni hao";
		String regex="\\b[a-z]{3}\\b";
		//将正则字符串编译成正则对象。
		Pattern pat=Pattern.compile(regex);
		//将正则对象与字符串相关连,并获取匹配器。
		Matcher matcher=pat.matcher(ster);
		//使用find()方法进行获取。
		
		while (matcher.find())
		{
			System.out.println(matcher.group());
		}
	}
	public static void getReplaceAll()
	{
			//电话号码
		String stre="15514573033";
		String regex="(\\d{3})(\\d{4})(\\d{4})";
		String stte=stre.replaceAll(regex,"$1****$3");//当在第二个参数中使用第一个正则参数中的组时,可以使用$编号来完成组的调用。\\1只能使用在正则表达式中。
		System.out.println(stte);
	
	}
	public static void getSplit()
	{
		//自定义字符串
		String st="xiao#####jia*******hou@@@@@@ni$$$hao";
		//定义规则
		String regex="(.)\\1+";
		String[] s=st.split(regex);
		//for循环遍历
		for (String ss:s)
		{
			System.out.println(ss);
		}
	}
	public static void getMatches()
	{
		//匹配qq号,自定义号码
		String str="54633d";
		//自定义规则
	String regex="[1-9]\\d{4,14}";
	boolean b=str.matches(regex);
	//打印
	System.out.println(b+"................."+str);
	}
}
注:()称之为组,按照叠词进行切割。叠词就是后者和前者一致。前者还是任意,必须后者在复用前者的内容。
必须在正则表达式中进行复用:将需要复用的内容进行封装,然后调用这个封装即可。
正则的复用用的是 () 来封装的,虽然没有名字,但是正则在使用()进行封装时,自动的给这些
小括号进行了编号,从1开始,称之为正则表达式中的组。通过组的编号就可以调用指定的组,进行复用。
3 小练习、
(1)、

	import java.util.*;
	 class RegexTextDemo
	 {
		 public static void main(String[] args)
		 {
		 /*
	 * 练习一:
	 * 我我.....我我.我....我.要.要要.....要.要学....学...学学....学.学编..编....编..编.编.程程.程.....程.程程
	 * 还原成:我要学编程
	 */
	 //思路:用到了,正则的替换功能。
	 getReplace();
	 /*
	 * 练习二:
	 * 127.0.0.1  3.3.3.3     192.168.104.23  10.10.10.10
	 * 要求按照ip地址的分类进行从小到大的排序。
	 * 
	 */

	 getEquals();
	 /*
	 * 练习三:校验电子邮件地址 E-mail。
	 * 
	 */
	 getMail();
		 }
		 public static void getMail()
		 {
			String ssss="3958_0@ioerfj.com";//自定义字符串
			//String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
			String regex="\\w+@\\w+(\\.\\w+)+";//定义规则
			System.out.println(ssss.matches(regex));//打印,验证
		 }
		 public static void getEquals()
		 {
		 String stre="127.0.0.1  3.3.3.3     192.168.104.23  10.10.10.10";
		 String regex="(\\d+)";//定义规则
		 String s=stre.replaceAll(regex,"00$1");//每个都添两个零
		 
		 String rege="0*(\\d{3})";//去掉零都保留三位
		 String stt=s.replaceAll(rege,"$1");
		 System.out.println(stt);
		 String[] sst=stt.split(" +");//进行切割
		 Arrays.sort(sst);//对数组进行排序
		 //遍历打印数组中的元素
		 for (String ts:sst)
		 {
			 System.out.println(ts);
		 } 
		 }
		 public static void getReplace()
		 {
		 String str ="我我.....我我.我....我.要.要要.....要.要学....学...学学....学.学编..编....编..编.编.程程.程.....程.程程";
		 String regex="\\.+";//定义规则
		 String sss=str.replaceAll(regex,"");//把..去掉
		 String rege="(.)\\1+";//定义规则
		 String ss=sss.replaceAll(rege,"$1");//在把叠词去掉
		 System.out.println(ss);//打印
		 
		 }
	 }
(2)、

//网络爬虫:其实就是一个应用程序,获取网络中的指定信息(符合指定规则的信息)。
import java.util.*;
import java.io.*;
import java.util.regex.*;
import java.net.*;

class RegexTextDemo1
{
	public static void main(String[] args)throws IOException
	{
	String regex="\\w+@\\w+(\\.\\w+)+";//定义规则
	String str_url="http://www.douban.com/group/topic/23934101/?start=500";//在那个网页上进行爬
	//File file=new File("1.txt");
	List<String>list=getList(str_url,regex);
	//for循环进行遍历打印
	for (String s:list )
	{
		System.out.println(s);
	}
	}
	public static List<String>getList(String str_url,String regex)throws IOException
	{
	
	List<String>list=new ArrayList<String>();
	//将str_rul封装成url对象。
	URL str_r=new URL(str_url);
	//打开链接。
	URLConnection urlc=str_r.openConnection();
	//获取读取流。
	InputStream is=urlc.getInputStream();
	BufferedReader br=new BufferedReader(new InputStreamReader(is));
	//将正则字符串编译成对象,
	Pattern p =Pattern.compile(regex);
	String s=null;
	while ((s=br.readLine())!=null)
	{
		Matcher matcher=p.matcher(s);
		while (matcher.find())
		{
			list.add(matcher.group());
		}
	}
	return list;
	
	}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值